一尘不染

Redis排行榜的独特得分

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

阅读 336

收藏
2020-06-20

共1个答案

一尘不染

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

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

2020-06-20