从Redis排序集中按等级检索项目(以及处理可以共享等级的项目)

时间:2019-04-23 04:29:06

标签: redis

我可以查询按分数(zrangebyscore),按值(zrange),按字典顺序(zrangebylex)等设置的redis排序。

但是,如果我想从Redis排序集中检索排名前10位的项目,最好使用哪种模式?

对我来说,这并不意味着只从排序后的集合(即zrevrange set_name 0 10)中检索前10个项目。为什么?因为在许多实际场景中,当某些项目具有相同的分数时,会为它们适当分配一个共享排名。因此,可能有11名成员的前10名名单(例如)。

是否可以通过这种方式查询Redis排序集中的排名?

我的另一个选择是检索整个集合并在redis之外进行计数。我认为这对于经常重新排名的大型游戏集可能不是最佳选择。

万一重要,我可以在Python项目中使用redis。

1 个答案:

答案 0 :(得分:0)

您需要另一个排序的集合来对得分进行排名,以便获得前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