如何解决 Redis 排序集绘制?
How to solve a Redis sorted set draw?
我正在使用 Redis 来处理用户积分排名,我得:
- 存储用户积分
- 获取用户排名位置
所以我使用 zincrby
来更新排名位置,然后我使用 zrevrangebyscore
来获取最高列表,zscore
和 zrevrank
来获取所有内容我需要
所以,当出现抽奖案例时(我实际上有很多),我不能相信 Redis 的排序标准。
我抽签的获胜标准是日期,最早的在前。这些是我正在存储的 Mongo 数据库 ID,因此我实际上可以从 _id
.
中检索日期
所以,如果我想知道用户的实际排名
- 获取用户获得的积分,可能使用
zrevrank
。
- 获取所有积分相同的用户
- 考虑上限和下限。
- 按从 Mongo ID 获得的日期对具有相同积分的用户进行排序。
- 根据其余相同点绘制和上下邻点分配位置
我将使用默认的 node.js 驱动程序编写所有这些代码,因此我们正在讨论的是 Javascript 代码。
任何 Redis 命令如何帮助我实现这一目标?
由于 Sorted Set 的分数可以是浮点值,您可以在其中存储时间戳和排名的组合,并使用小数点作为您的 "delimiter"。这将为您提供同样基于日期的排名。
例如,如果我的排名是 50,现在的时间戳是 1438594593,根据以下 "formula":
,集合中的分数将是 50.856140541
分数=排名+(1 - 时间戳/10^10)
我正在使用 Redis 来处理用户积分排名,我得:
- 存储用户积分
- 获取用户排名位置
所以我使用 zincrby
来更新排名位置,然后我使用 zrevrangebyscore
来获取最高列表,zscore
和 zrevrank
来获取所有内容我需要
所以,当出现抽奖案例时(我实际上有很多),我不能相信 Redis 的排序标准。
我抽签的获胜标准是日期,最早的在前。这些是我正在存储的 Mongo 数据库 ID,因此我实际上可以从 _id
.
所以,如果我想知道用户的实际排名
- 获取用户获得的积分,可能使用
zrevrank
。 - 获取所有积分相同的用户
- 考虑上限和下限。
- 按从 Mongo ID 获得的日期对具有相同积分的用户进行排序。
- 根据其余相同点绘制和上下邻点分配位置
我将使用默认的 node.js 驱动程序编写所有这些代码,因此我们正在讨论的是 Javascript 代码。
任何 Redis 命令如何帮助我实现这一目标?
由于 Sorted Set 的分数可以是浮点值,您可以在其中存储时间戳和排名的组合,并使用小数点作为您的 "delimiter"。这将为您提供同样基于日期的排名。
例如,如果我的排名是 50,现在的时间戳是 1438594593,根据以下 "formula":
,集合中的分数将是 50.856140541分数=排名+(1 - 时间戳/10^10)