【问题标题】:Retrieving items by rank from a redis sorted set (and handling items that can share ranks)从 redis 排序集中按排名检索项目(并处理可以共享排名的项目)
【发布时间】:2019-09-12 05:36:07
【问题描述】:

我可以查询一个按分数(zrangebyscore)、按值(zrange)、按字典顺序(zrangebylex)等排序的redis。

但是,如果我想从 redis 排序集中检索排名前 10 的项目,最好使用什么模式?

对我来说,这不等于只是从排序集中检索前 10 个项目(即zrevrange set_name 0 10)。为什么?因为在许多现实世界的场景中,当某些项目具有相同的分数时,它们会被适当地赋予一个共享的排名。因此,可能会有一个包含 11 个成员的前 10 名列表(例如)。

是否可以通过这种方式查询redis sorted set中的rank?

我的另一个选择是检索整个集合并在 redis 之外进行计数。我相信这对于经常重新排名的大型集合来说可能不是最理想的。

如果重要的话,我会在 Python 项目中使用 redis。

【问题讨论】:

    标签: redis


    【解决方案1】:

    你需要另一个排序集来对分数进行排序,这样你就可以得到前 N 个分数。通过返回的分数范围,您可以使用ZRANGEBYSCORE获取成员列表。

    添加

    ZADD members 0 a 1 b 1 c 2 d 2 e 3 f
    
    ZADD scores 0 0 1 1 2 2 2 2 3 3
    

    搜索

    获取得分前 3 名的成员。

    ZREVRANGE scores 0 2
    
    // it returns '3, 2, 1' so the score range is [1, 2]
    
    ZRANGEBYSCORE members 1 3
    
    // you can get the result: b, c, d, e, f
    

    我将 DELETE 部分留作练习 :)

    同时检查this related question

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多