【问题标题】:How to solve a Redis sorted set draw?如何解决 Redis sorted set draw?
【发布时间】:2015-08-17 08:15:38
【问题描述】:

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

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

所以我使用zincrby 来更新排名位置,然后我使用zrevrangebyscore 作为顶部列表,zscorezrevrank 来获取我需要的所有内容。

因此,当存在抽签案例时(实际上我有很多抽签案例),我不能相信 Redis 标准进行排序。

我的抽签案例的获胜标准是日期,其中最早的是第一个。这些是我存储的 MongoDB id,因此我实际上可以从 _id 检索日期。

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

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

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

Redis 命令如何帮助我实现这一点?

【问题讨论】:

    标签: redis node-redis


    【解决方案1】:

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

    例如,如果我的排名是 50 并且现在的时间戳是 1438594593,那么根据以下“公式”,集合中的分数将是 50.856140541:

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

    【讨论】:

    • 谢谢,您的建议需要注意的是,对于 Redis,最新的会处于更高的位置,我需要命令才能获得更高的位置
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2014-06-01
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多