Redis:用于修剪分类集的ZUNIONSTORE

时间:2014-01-23 21:52:06

标签: python redis

是否可以将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的副本。

有没有其他方法可以在不经过循环的情况下实现这样的目标?

1 个答案:

答案 0 :(得分:1)

ZUNIONSTORE仅将键作为参数,而不是Python变量。 因此,您应该迭代trimmed_set值并使用ZADD函数将它们存储到新的有序集中。 如果此ZSET的密钥为trimmed_set,那么您的最后一行代码将起作用:

r_server.zunionstore('set3', ['set1', 'trimmed_set'])  

或者,您可以使用Lua脚本在Redis中执行第二组的修剪和存储。