将Redis排序集复制到集合中

Sco*_*len 4 redis

如何将Redis中的排序集复制到常规的未排序集?是否有可以执行此操作的redis命令?我可以手动遍历已排序的集合,然后手动插入未排序的集合,但是似乎有更好的方法可以执行此操作。

m6k*_*m6k 5

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

但是您可以编写简单的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
Run Code Online (Sandbox Code Playgroud)

结果:

"dd1c22a22108d758b93c26eb92d1ef2933cec314"
(integer) 0
(integer) 0
(integer) 0
(nil)
1) "second"
2) "first"
3) "third"
Run Code Online (Sandbox Code Playgroud)

SCRIPT LOAD定义脚本并返回其sha哈希值,即EVALSHA而非执行的值。参数2表示后面紧跟着2个键名,第一个被设置为从中复制,第二个被设置为从中复制。