【问题标题】:Unique scoring for redis leaderboardredis排行榜的唯一得分
【发布时间】:2013-03-12 05:44:07
【问题描述】:

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

【问题讨论】:

    标签: redis


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的及时和优雅的回应 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多