gpt4 book ai didi

Redis ZRANGEBYSCORE 奇怪的行为

转载 作者:IT王子 更新时间:2023-10-29 06:09:17 25 4
gpt4 key购买 nike

我使用的是 Redis 2.6。我遇到过 ZRANGEBYSCORE 函数的奇怪行为。我有一个长度约为几百万个元素的排序集。像这样:

10 marry 
15 john
25 bob
...

所以比较查询:

ZRANGEBYSCORE longset 25 50 LIMIT 0 20  works like a charm, it takes milliseconds
ZRANGEBYSCORE longset 25 50 this one hangs up for a minutes!!

我感兴趣的所有元素都在集合的前一百个中。我认为没有必要扫描权重大于“50”的元素因为它是 SORTED 集。

请解释一下redis是如何扫描排序集合的,以及为什么这两个查询之间存在如此大的差异。

最佳答案

关于 Redis 的最好的事情之一,IMO,是你可以在文档中检查每个命令的时间复杂度。 zrangebyscore 的文档指定:

Time complexity: O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).

[...]

Keep in mind that if offset is large, the sorted set needs to be traversed for offset elements before getting to the elements to return, which can add up to O(N) time complexity.

这意味着如果你知道你只需要一定数量的项目,并指定一个LIMIT偏移计数,如果offset是(接近) 0,可以认为是O(log(N)),但是如果返回的项数很高(或者偏移量很大),可以认为是O (N).

关于Redis ZRANGEBYSCORE 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com