【问题标题】:Rank all items of a set in Redis在 Redis 中对集合的所有项目进行排名
【发布时间】:2012-06-10 17:41:00
【问题描述】:

我一直在 redis 中尝试使用命令 ZREVRANK,它似乎在单个项目上工作得很好,但我似乎无法找到一种方法来返回一组中所有项目的排名:

“item1”得分:3
"item2" 得分:5
"item3" 得分:2
“item4”得分:3
"item5" 得分:7

排名结果:

"item5" 得分:7 排名:0
"item2" 得分:5 排名:1
"item1" 得分:3 排名:2
"item4" 得分:3 排名:2
"item3" 得分:2 排名:3

我想知道是否有人找到了实现这一目标的方法?

【问题讨论】:

  • 不确定为什么不能使用 zrange 或 zrevrange?

标签: database nosql redis


【解决方案1】:

您是否考虑过不使用 zrange 或 zrevrange?
zcard 会给你集合中元素的总数。

【讨论】:

  • 我试过 zevrange 但它不能识别关系,例如在我的示例中,“项目 1”和“项目 4”的得分为 3,但在执行 zrevrange 时,所有项目的编号都为 1、2、3、4、5,没有平局?
  • 我相信字典顺序用于相同分数的元素。这不是你观察到的吗?
  • 不,我想我可能已经想到会发生这种情况,我可以看到它现在肯定会为相同的分数条目返回不同的排名。感谢您的帮助,我想知道您是否知道如何有效地评估此订单中的关系?
  • 您能否将实际插入共享到排序集中(如果它不是“item1”、“item2”等)。在分数平局的情况下,我会按字典顺序得到结果。如果您以排序方式获得所有结果并且您只需要重新排序关系,您可能希望考虑编写自己的关系比较。为了识别平局,我认为你应该只需要检查前一项(即使有多个项目处于平局)只是为了找出平局中的第二项并从那里继续直到你得到所有领带中的物品。
猜你喜欢
  • 2019-09-16
  • 2021-03-04
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多