我正在使用taoensso.carmine redis客户端并希望实现以下内容:给定序列s
,获取其在redis中不存在的所有元素。 (我的意思是redis&#39的EXISTS命令返回false)
起初我想做以下事情:
(wcar conn
(remove #(car/exists %) s))
但它会返回car / exists响应的序列,而不是按照它们过滤我的序列
(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)))
答案 0 :(得分:0)
您的remove
功能很懒,所以它不会做任何事情。您也无法在wcar
宏中进行数据操作,所以我会这样:
(let [keys ["exists" "not-existing"]]
(zipmap keys
(mapv pos?
(car/wcar redis-db
(mapv (fn [key]
(car/exists key))
keys)))))
答案 1 :(得分:-1)
你能重新检查一下你是第一个解决方案吗?我不知道wcar
做了什么,但是这个例子表明你正走在正确的轨道上:
> (remove #(odd? %) (range 9))
(0 2 4 6 8)
匿名函数#(odd? %)
会返回true
或false
个结果,这些结果用于确定要保留的数字。但是,它是(remove...)
返回的原始数字,而不是真/假。