是否有一项功能可以将redis中排序集的基数保持为常数?

时间:2014-08-01 09:34:18

标签: redis

示例,我想要一个键(排序集)只存储200个元素。如果向集合中添加了一个新元素(始终使用高分),则应自动删除集合中得分最低的元素,从而保持已排序集合的基数不变。

1 个答案:

答案 0 :(得分:1)

不,本身没有这样的功能,但它很容易实现。

首先,请记住成员是唯一的,因此可能存在某种情况(除非在您的用例中这不是这样),其中添加具有新(高)分数的新成员实际上将更新现有成绩会员。因此,在每次ZADD到您的密钥后,请执行ZCARD,例如:

c = redis.zcard('key')

如果ZCARD的回复是> 200,使用差异按排名修剪排序集ZREMRANGEBYRANK

if c > 200:
   r.zremrangebyrank('key', 0, c - 200 -1)

(顺便说一句,如果您只在一个会员中添加一个会员,则上述会员只会删除一个[排名最低的会员])