我正在使用 Redis 来创建排行榜,并试图找到一种很好的方法来处理获得相同高分的玩家(具有相同高分的玩家应该按照谁先获得高分的顺序排序)
我曾想过做以下...
zadd leaderboard highscore.timestamp player_id.attempt_number
但是,当我执行 zrevrange 时,时间戳的顺序显然不正确。
示例输入:
zadd leaderboard 20.123 5.1
zadd leaderboard 20.125 5.2
zadd leaderboard 20.012 5.3
zadd leaderboard 21.024 5.4
输出:
zrevrange leaderboard 0 -1
5.4
5.2
5.1
5.3
期望的输出:
5.4
5.3
5.1
5.2
最佳答案
一个选择是执行 zadd leaderboard highscore.(Long.MAX_VALUE - timestamp) player_id.attempt_number
(将 Long.MAX_VALUE 更改为您的时间戳的合理最高可能值 - 带符号的 64 bit int 将存储大约 3 亿年的毫秒数,因此可能不需要)
编辑:不要忘记添加前导零 :)
关于redis - Redis排行榜的独特得分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348426/