2016-09-28 8 views
0

私はtaoensso.carmine redis clientを使用していますが、以下のことを達成したいと思います:与えられたシーケンスs、 (私は、コマンドがfalseを返す存在するRedisの年代の平均)taoensso.carmineを使用して複数のキーの存在を確認してください

は、最初は、私は次の操作を実行するために考えた:

(wcar conn 
    (remove #(car/exists %) s)) 

が、それは車の列/むしろ

それらによって私のシーケンスをフィルタリングよりも応答が存在する返します
(remove #(wcar conn (car exists %)) s) 

作業はしますが、パイプラインがなく、毎回新しい接続を使用するため、時間がかかります。

このように、私はいくつかの複雑なマップ操作を以下に終わらせますが、それを達成するための簡単な方法があるはずです。どうやって?

(let [s (range 1 100) 
     existance (wcar conn 
         (doall 
         (for [i s] 
         (car/exists i)))) 
     existance-map (zipmap s existance)] 
    (mapv first (remove (fn [[k v]] (= v 1)) existance-map))) 

答えて

-1

あなたは最初の解決策を再検討できますか?私はwcarが何をするか分からないが、この例では、あなたが正しい軌道に乗っていることを示しています

> (remove #(odd? %) (range 9)) 
(0 2 4 6 8) 

無名関数#(odd? %)リターンのいずれかに保つためにどの数値を決定するために使用されているtrueまたはfalse結果を。ただし、元の数値は(remove...)で返されますが、真/偽ではありません。

0

あなたのremove機能は怠惰なので何もしません。 wcarマクロの内部でデータ操作を行うこともできませんので、私はこのようになります:

(let [keys ["exists" "not-existing"]] 
    (zipmap keys 
      (mapv pos? 
       (car/wcar redis-db 
          (mapv (fn [key] 
            (car/exists key)) 
           keys))))) 
関連する問題