redis - 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

最佳答案

一个选择是执行 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/

相关文章:

node.js 从 redis 集群获取数据,使用 ioredis,zrange 方法不返回正确数量的数据

redis - 使用 stackexchange.Redis 批量删除?

ruby-on-rails - Resque 和 Redis 服务器不能很好地相互配合

python - redis publish 是如何工作的?

android - 从在 Docker 中运行的 Android 模拟器连接到 Redis

linux - 打开 RDB 文件失败...只读文件系统

map - 使用 Redis 服务 URL 映射到 nginx

lua - redis-lua 在需要时返回 nil

c# - 当我的代码依赖于 redis 时,我应该如何编写测试

Redis 键空间通知 - 获取集合操作的值(小尺寸)