使用 Redis 排序集实现密集排名

问题描述 投票:0回答:2

我正在尝试实现一个带有排名的排行榜,数据作为排序集存储在 Redis 中。我试图弄清楚的部分是如何实现密集(即“1-2-2-3”)排名,例如,用户的排名如下:

Score   User    Rank
---------------------
22      user1   1
21      user2   2
21      user3   2
21      user4   2
20      user5   3
20      user6   3

这个答案:https://stackoverflow.com/a/14944280/2177几乎是我所需要的,但它相当于“1-2-2-4”排名,这对我的应用程序来说是不可取的,例如:

1-2-2-4 Ranking 
Score   User    Rank
---------------------
22     user1    1
21     user2    2
21     user3    2
21     user4    2
20     user5    5
20     user6    5

这似乎是一个相当常见的用例。有没有人在Redis中成功实现了这样的事情,如果是的话,是如何实现的?

redis ranking sortedset
2个回答
2
投票

我最终做的是添加第二个排序集,其中仅包含唯一的分数,然后我可以查询它们在密集排名中各自的位置。


0
投票

如果你有

score
,你可以用
ZCOUNT(score, +inf)
实现密集排名(1-2-2-3格式),时间复杂度为O(log(N)),对数且快速。

© www.soinside.com 2019 - 2024. All rights reserved.