gpt4 book ai didi

ruby - Redis 排序集 : Bulk ZSCORE

转载 作者:IT王子 更新时间:2023-10-29 06:09:48 27 4
gpt4 key购买 nike

如何根据成员的 ID 从排序集中获取成员列表而不是仅获取一个成员?

我想用实际排序集中的一组 ID 构建一个子集。

我正在为 Redis 使用 Ruby 客户端,不想一一迭代。因为我想查找的成员可能超过 3000 个。

这是 issue tracker到一个新命令 ZMSCORE 来执行批量 ZSCORE。

最佳答案

ZSCORE 没有可变形式,但是 - 请参阅讨论:https://github.com/antirez/redis/issues/2344

也就是说,目前您可以为此使用 Lua 脚本。例如:

local scores = {}
while #ARGV > 0 do
scores[#scores+1] = redis.call('ZSCORE', KEYS[1], table.remove(ARGV, 1))
end
return scores

从命令行运行它看起来像:

$ 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"

编辑:在 Ruby 中,它可能类似于以下内容,尽管您最好使用 SCRIPT LOADEVALSHA并从外部文件加载脚本(而不是在应用程序中对其进行硬编码):

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"])

Lua脚本获取成员(member)ID分数:

local scores = {}
while #ARGV > 0 do
local member_id = table.remove(ARGV, 1)
local member_score = {}
member_score[1] = member_id
member_score[2] = redis.call('ZSCORE', KEYS[1], member_id)
scores[#scores + 1] = member_score
end
return scores

关于ruby - Redis 排序集 : Bulk ZSCORE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com