【发布时间】:2020-02-24 15:07:30
【问题描述】:
我正在使用 Redis 排序集来维护我的游戏排行榜。我有一个场景,我需要保持与竞赛排行榜得分相同的用户的相同排名。例如。
| member | score | rank |
— — — — — — — — — — —
| member_1 | 50 | 1 |
| member_2 | 50 | 1 |
| member_3 | 30 | 3 |
| member_4 | 30 | 3 |
| member_5 | 10 | 5 |
到目前为止,我正在使用 Redis 排序集的默认实现,它按字典顺序返回排名。
127.0.0.1:6379> zadd test-leaderboard 9 user1
(integer) 1
127.0.0.1:6379> zadd test-leaderboard 5 user2
(integer) 1
127.0.0.1:6379> zadd test-leaderboard 5 user3
(integer) 1
127.0.0.1:6379> zadd test-leaderboard 3 user4
(integer) 1
如果我查询 user2 和 user3 排名,我会得到不同的结果
127.0.0.1:6379> zrank test-leaderboard user2
(integer) 1
127.0.0.1:6379> zrank test-leaderboard user3
(integer) 2
我检查了 Redis 文档,没有这样的功能可以这样做。所以我想知道我必须做什么或者实现这个功能的最佳方式是什么。
注意:我在 SET 中有 10K 条记录,我需要在运行时对其进行维护,并且我使用的是 Java 编程语言。
【问题讨论】:
-
我的问题有点不同,因为我试图在运行时这样做。而且我没有得到上述链接的解决方案,因为它使用的是 Lua 脚本。
标签: java redis leaderboard sortedset