如何解决 Redis 排序集绘制?

How to solve a Redis sorted set draw?

我正在使用 Redis 来处理用户积分排名,我得:

  1. 存储用户积分
  2. 获取用户排名位置

所以我使用 zincrby 来更新排名位置,然后我使用 zrevrangebyscore 来获取最高列表,zscorezrevrank 来获取所有内容我需要

所以,当出现抽奖案例时(我实际上有很多),我不能相信 Redis 的排序标准。

我抽签的获胜标准是日期,最早的在前。这些是我正在存储的 Mongo 数据库 ID,因此我实际上可以从 _id.

中检索日期

所以,如果我想知道用户的实际排名

  1. 获取用户获得的积分,可能使用zrevrank
  2. 获取所有积分相同的用户
  3. 考虑上限和下限。
  4. 按从 Mongo ID 获得的日期对具有相同积分的用户进行排序。
  5. 根据其余相同点绘制和上下邻点分配位置

我将使用默认的 node.js 驱动程序编写所有这些代码,因此我们正在讨论的是 Javascript 代码。

任何 Redis 命令如何帮助我实现这一目标?

由于 Sorted Set 的分数可以是浮点值,您可以在其中存储时间戳和排名的组合,并使用小数点作为您的 "delimiter"。这将为您提供同样基于日期的排名。

例如,如果我的排名是 50,现在的时间戳是 1438594593,根据以下 "formula":

,集合中的分数将是 50.856140541

分数=排名+(1 - 时间戳/10^10)