如何将redis中的已排序集复制到常规的未排序集?有没有可以做到这一点的redis命令?我可以手动迭代已排序的集合,并在未排序的集合中手动插入,但似乎有一种更好的方法可以做到这一点。
发布于 2013-01-12 23:45:56
我不认为有任何命令可以直接做到这一点。
但您可以编写简单的lua脚本在服务器上执行此操作,而不是将排序的set内容下载到客户端,然后将其推送回新的set。
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"
脚本加载定义脚本,并返回其sha散列EVALSHA,然后执行。参数是2,表示后面跟有2个键名,第一个排序设置为copy from,第二个设置为copy to。
https://stackoverflow.com/questions/14297671
复制相似问题