redis排行榜的独特得分

时间:2013-03-11 20:55:46

标签: redis

我正在使用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

1 个答案:

答案 0 :(得分:2)

一个选项是zadd leaderboard highscore.(Long.MAX_VALUE - timestamp) player_id.attempt_number(将Long.MAX_VALUE更改为时间戳的合理最高可能值 - 签名的64位int将存储大约3亿年的毫秒数,因此可能不会需要)

编辑:不要忘记添加前导零:)