是否可以将ZUNIONSTORE用于特定范围的有序集合?我目前正在使用Andy McCurdy的Python Redis模块:https://github.com/andymccurdy/redis-py
例如。假设我有两个排序集。 set1有5个元素,set2有10个元素。
这是set1:
[('1', 1.0), ('2', 2.0), ('3', 3.0), ('4', 4.0), ('5', 5.0)]
这是set2
[('6', 6.0), ('7', 7.0), ('8', 8.0), ('9', 9.0), ('10', 10.0), ('11', 11.0), ('12', 12.0), ('13', 13.0), ('14', 14.0), ('15', 15.0)]
我尝试通过执行以下操作来抓取set2中的前5个元素:
trimmed_set = r_server.zrevrange('set2', 0, 4, withscores=True)
返回:
[('11', 11.0), ('12', 12.0), ('13', 13.0), ('14', 14.0), ('15', 15.0)]
到目前为止一切顺利。但现在我想将修剪后的集合与set1合并。
我尝试过:
r_server.zunionstore('set3', ['set1', 'trimmed_set'])
这不起作用。它所做的就是让set3成为set1的副本。
有没有其他方法可以在不经过循环的情况下实现这样的目标?
答案 0 :(得分:1)
ZUNIONSTORE仅将键作为参数,而不是Python变量。
因此,您应该迭代trimmed_set
值并使用ZADD函数将它们存储到新的有序集中。
如果此ZSET的密钥为trimmed_set
,那么您的最后一行代码将起作用:
r_server.zunionstore('set3', ['set1', 'trimmed_set'])
或者,您可以使用Lua脚本在Redis中执行第二组的修剪和存储。