Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis ZRANGEBYSCORE奇怪的行为_Redis - Fatal编程技术网

Redis ZRANGEBYSCORE奇怪的行为

Redis ZRANGEBYSCORE奇怪的行为,redis,Redis,我正在使用Redis2.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

我正在使用Redis2.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”的元素 因为它是排序集


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

关于redis,IMO,最好的一点是,您可以检查文档中每个命令的时间复杂度。用于的文档指定:

时间复杂度:O(log(N)+M),其中N是排序集中的元素数,M是返回的元素数。如果M是常数(例如总是要求前10个元素具有限制),则可以考虑O(log(n))。 [……]

请记住,如果
offset
很大,则在到达要返回的元素之前,需要遍历
offset
元素的排序集,这可能会增加时间复杂度O(N)


这意味着,如果你知道你只需要一定数量的项目,并指定一个<代码>限制偏移计数<代码>,如果<代码>偏移是(接近)<代码> 0代码>代码,你可以认为它是强> O(log(n))< /强>,但是如果返回的项目数高(或者偏移量高),它可以被认为是<强> O(n)。

关于Redis,IMO,最好的一点是,您可以检查文档中每个命令的时间复杂度。用于的文档指定:

时间复杂度:O(log(N)+M),其中N是排序集中的元素数,M是返回的元素数。如果M是常数(例如总是要求前10个元素具有限制),则可以考虑O(log(n))。 [……]

请记住,如果
offset
很大,则在到达要返回的元素之前,需要遍历
offset
元素的排序集,这可能会增加时间复杂度O(N)

这意味着,如果你知道你只需要一定数量的项目,并指定一个<代码>限制偏移计数<代码>,如果<代码>偏移是(接近)<代码> 0代码>代码,你可以认为它是强> O(log(n))< /强>,但是如果返回的项目数高(或者偏移量高),则可以被认为是“强> O(n)< /强>