我正在尝试在 Redis 中建立排行榜,并能够获得最高X
分并检索 user 的排名Y
。
Redis 中的排序列表看起来很容易,除了一个问题 - 我需要的分数不仅按实际分数排序,还按日期排序(所以早先获得相同分数的人将排在首位)。SQL 查询将是:
select * from scores order by score desc, date asc
在 Redis 中的排序集上运行zrevrange
使用如下内容:
select * from scores order by score desc, key desc
这将使用户在字典上具有更大的键。
我能想到的一种解决方案是对排序集中的分数字段进行一些操作,以生成由分数和时间戳组成的组合数字。
例如,对于555
带有时间戳111222333
的分数,最终分数可能类似于555.111222333
将新分数置于旧分数之上(不完全是我需要的,但可以进一步调整)。
这会起作用,但只适用于小数字,因为排序集中的分数只有 16 位有效数字,因此其中 10 位将立即浪费在时间戳上,没有太多空间留给实际分数。
任何想法如何使排序集以正确的顺序排列值?我真的希望最终结果是一个排序集(以便轻松检索用户的排名),即使它需要一些临时结构和排序来构建这样的集合。