5

如何将redis中的排序集复制到常规的未排序集?有没有可以做到这一点的redis命令?我可以手动遍历排序集并手动插入未排序集,但似乎有更好的方法来做到这一点。

4

1 回答 1

7

我认为没有任何命令可以直接执行此操作。

但是您可以编写简单的 lua 脚本在服务器上执行此操作,而不是将已排序的集合内容下载到客户端,然后将其推送回新集合。

Redis 命令:

SCRIPT LOAD "for i,v in ipairs(redis.call('zrange', KEYS[1], 0, -1)) do redis.call('sadd', KEYS[2], v) end"
ZADD zset 1 first
ZADD zset 2 second
ZADD zset 3 third
EVALSHA dd1c22a22108d758b93c26eb92d1ef2933cec314 2 zset set
SMEMBERS set

结果:

"dd1c22a22108d758b93c26eb92d1ef2933cec314"
(integer) 0
(integer) 0
(integer) 0
(nil)
1) "second"
2) "first"
3) "third"

SCRIPT LOAD 定义脚本并返回其 sha 哈希值 EVALSHA,然后执行。参数为 2 表示后面有 2 个键名,第一个被排序设置为复制自,第二个被设置为复制到。

于 2013-01-12T23:45:56.167 回答