Redis-如何将zrange查询的结果存储为另一个有序集

时间:2018-11-21 12:36:16

标签: redis sortedset

例如,我使用以下命令创建一个排序集:

zadd key1 1 u1 2 u2 3 u3

现在,我要查询最后2个项目并存储在其他键下,例如key2。我知道我需要这样查询:

zrange key1 -2 -1

但是我不知道如何用key2存储结果。抱歉,菜鸟问题,我是Redis的新手,才2个小时:)

2 个答案:

答案 0 :(得分:0)

尽管Redis没有内置命令可以执行此操作,但是您可以使用Lua脚本轻松安全地逃脱。这一点有点棘手,因为ZRANGE的回复需要在成对的成员分数之间交换以用作ZADD的输入。

local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]

local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')

for i = 1, #payload/2 do
  payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end

return redis.call('ZADD', dst, unpack(payload))

有关如何在Redis中使用Lua的详细信息,请参见EVAL commmand

答案 1 :(得分:0)

ZRANGESTORE 已添加到 Redis 6.2