是否有一个Redis命令可以帮助我找到两个排序集共有的最大(或最小)分数?
例如,给定这些集合:
设置1(分数/键)
设置2(分数/键)
落在两组范围内的最高得分为3。最低得分为2。在Redis中快速轻松地找到它的方法?我知道我可以在一组代码中迭代代码,并对照另一组测试这些值,或者检查ZPOPMAX / ZPOPMIN,但我想知道是否有更简单的方法。
答案 0 :(得分:2)
redis中没有命令可以直接解决您的问题。但是,您可以使用redis命令ZUNIONSTORE
将这两个集合合并为一个新集合,并在新集合中找到最小值和最大值。
答案 1 :(得分:1)
@Gunasekar的答案是正确的,只是指出了另外两个选择:
使用Lua脚本在较小的集合上迭代服务器端,对另一个集合中的每个元素调用ZSCORE进行过滤,直到获得第一个匹配为止。在最坏的情况下,这将是O(N * logM)。
对于每对这样的zset,在运行时维护min / max成员。这将增加更新成员/分数的复杂性,并可能导致写入放大问题,但读取速度非常快。