如何根据排序集中的ID而不是仅仅一个成员来获取成员列表?
我想使用实际有序集合中的一组ID构建一个子集。
我正在为Redis使用Ruby客户端,并且不想逐个迭代。因为我想要查找超过3000个成员。
以下是新命令ZMSCORE issue tracker进行批量ZSCORE。
答案 0 :(得分:3)
volumes
没有可变形式,但请参阅讨论:https://github.com/antirez/redis/issues/2344
那说,暂时,你可以做的就是使用Lua脚本。例如:
ZSCORE
从命令行运行它看起来像:
local scores = {}
while #ARGV > 0 do
scores[#scores+1] = redis.call('ZSCORE', KEYS[1], table.remove(ARGV, 1))
end
return scores
编辑:在Ruby中,它可能类似于以下内容,尽管您最好使用SCRIPT LOAD
和EVALSHA
并从外部加载脚本文件(而不是在应用程序中硬编码):
$ redis-cli ZADD foo 1 a 2 b 3 c 4 d
(integer) 4
$ redis-cli --eval mzscore.lua foo , b d
1) "2"
2) "4"
require 'redis'
script = <<LUA
local scores = {}
while #ARGV > 0 do
scores[#scores+1] = redis.call('ZSCORE', KEYS[1], table.remove(ARGV, 1))
end
return scores
LUA
redis = ::Redis.new()
reply = redis.eval(script, ["foo"], ["b", "d"])