我可以查询按分数(zrangebyscore
),按值(zrange
),按字典顺序(zrangebylex
)等设置的redis排序。
但是,如果我想从Redis排序集中检索排名前10位的项目,最好使用哪种模式?
对我来说,这并不意味着只从排序后的集合(即zrevrange set_name 0 10
)中检索前10个项目。为什么?因为在许多实际场景中,当某些项目具有相同的分数时,会为它们适当分配一个共享排名。因此,可能有11名成员的前10名名单(例如)。
是否可以通过这种方式查询Redis排序集中的排名?
我的另一个选择是检索整个集合并在redis之外进行计数。我认为这对于经常重新排名的大型游戏集可能不是最佳选择。
万一重要,我可以在Python项目中使用redis。
答案 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 部分留作练习:)