I am using taoensso.carmine redis client and want to achieve the following: given sequence s
, get all its elements that aren't exist in redis. (I mean for which redis's EXISTS command return false)
At first I thought to do the following:
(wcar conn
(remove #(car/exists %) s))
but it returns sequence of car/exists responses rather than filtering my sequence by them
(remove #(wcar conn (car exists %)) s)
Does the job but takes a lot of time because no-pipeling and using new connection each time.
So I end up with some tangled map manipulation below, but I believe there should be simplier way to achieve it. How?
(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)))
Could you reexamine you're first solution? I don't know what
wcar
does, but this example shows that you're on the right track:The anonymous function
#(odd? %)
returns eithertrue
orfalse
results which are used to determine which numbers to keep. However, it is the original numbers that are returned by(remove...)
, not true/false.