如何限制Redis排序集中的项目数

时间:2018-04-11 08:51:56

标签: redis sortedset

在我的情况下,我将很多记录上传到Redis排序集,但我只需要存储10个得分最高的项目。我无法影响上传的数据(在上传之前对其进行排序和限制)。

目前我只是执行

ZREMRANGEBYRANK key 0 -11

上传完成后,但这种方法看起来不是很理想(它很慢,如果Redis可以处理它会更好)。

Redis提供开箱即用的东西来限制排序集中的项目数量吗?

1 个答案:

答案 0 :(得分:3)

Nopes,除了ZREMRANGEBYRANK之外,redis不提供任何此类功能。

关于保留a redis list of constant size存在类似的问题,仅当使用LPUSH从左侧推送元素时才说10个元素。

解决方案在于优化修剪操作。

暂停您的排序集,不是每次都

方法:

  1. 每次使用随机整数运行ZREMRANGEBYRANK,概率为1/5。

  2. 使用redis管道或Lua脚本来实现这一目标,这甚至可以节省几乎每5次呼叫时发生的两次网络呼叫。

  3. 这足以达到上述目的。

    算法示例:

    ZADD key member1 score1
    random_int = some random number between 1-5
    if random_int == 1:  # trim sorted set with 1/5 chance
       ZREMRANGEBYRANK key 0 -11