Redis排序集:如何获得第一个交叉元素?

时间:2012-04-08 11:07:51

标签: redis

我在Redis中有许多大型排序集(5m-25m),我希望得到这些集合中出现的第一个元素。 例如,我有20套,想要取第1组,第5组,第7组和第12组,只得到第一组只有那些组。

看起来ZINTERSTORE后跟一个“ZRANGE foo 0 0”会做更多我需要的工作,因为它会计算所有交叉点然后返回第一个。是否有替代解决方案不需要计算所有交叉点?

1 个答案:

答案 0 :(得分:2)

虽然我建议这样做,但没有直接的本地替代方案:

创建哈希,其成员是您的元素。每次添加一个已排序的集合后,递增相关成员(使用HINCRBY)。当然,只有在检查到您尝试添加的有序集合中已经存在该元素后,才能进行增量。

这样,您就可以快速了解哪些元素出现在4组中。

更新:现在我重新考虑它,查询哈希值以查找值为4( O(n))的项目可能过于昂贵。另一种选择是创建另一个排序集,其成员是你的元素,他们的分数会增加(如前所述,但使用ZINCRBY),你可以快速拉出所有分数为4的元素(使用{{ 3}})。