查找两个Redis排序集中存在的最大值(或最小值)

时间:2018-09-07 22:46:36

标签: redis

是否有一个Redis命令可以帮助我找到两个排序集共有的最大(或最小)分数?

例如,给定这些集合:

设置1(分数/键)

  • 1个“一个”
  • 2个“两个”
  • 5个“五个”

设置2(分数/键)

  • 2个“两个”
  • 3个“三个”
  • 5个“五个”

落在两组范围内的最高得分为3。最低得分为2。在Redis中快速轻松地找到它的方法?我知道我可以在一组代码中迭代代码,并对照另一组测试这些值,或者检查ZPOPMAX / ZPOPMIN,但我想知道是否有更简单的方法。

2 个答案:

答案 0 :(得分:2)

redis中没有命令可以直接解决您的问题。但是,您可以使用redis命令ZUNIONSTORE将这两个集合合并为一个新集合,并在新集合中找到最小值和最大值。

答案 1 :(得分:1)

@Gunasekar的答案是正确的,只是指出了另外两个选择:

  1. 使用Lua脚本在较小的集合上迭代服务器端,对另一个集合中的每个元素调用ZSCORE进行过滤,直到获得第一个匹配为止。在最坏的情况下,这将是O(N * logM)。

  2. 对于每对这样的zset,在运行时维护min / max成员。这将增加更新成员/分数的复杂性,并可能导致写入放大问题,但读取速度非常快。

相关问题