redis - 如何解决 Redis 排序集绘制?

标签 redis node-redis

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

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

所以我使用 zincrby 来更新排名位置,然后我使用 zrevrangebyscore 作为顶级列表,zscorezrevrank 以获得我需要的一切。

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

我抽奖的获胜标准是日期,最老的排在第一位。这些是我正在存储的 MongoDB ID,因此我实际上可以从 _id 中检索日期。

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

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

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

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

最佳答案

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

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

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

关于redis - 如何解决 Redis 排序集绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31783813/

相关文章:

Redis HSCAN 多重匹配

nginx - 在 Nginx 中向 Redis 添加键/值

c# - 在stackexchange redis中存储ConnectionMultiplexer的正确位置在哪里

node.js - Redis 连接处于中断状态 : connection timeout exceeded. 可能已经处理过 Nodejs + Async-redis

json - 操作 Redis JSON 中的嵌套对象数组

node.js - redis.lpush 多项

ruby-on-rails - 为滚动界面缓存分页数据并避免客户端重复

python - Redis 批量插入不起作用

node.js - Node : I can't make connect-redis work with express

javascript - 使用 Redis 扩展 Socket.IO,然后扩展 Redis 本身