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排序集(如何)是个好主意吗?_Redis - Fatal编程技术网

迭代Redis排序集(如何)是个好主意吗?

迭代Redis排序集(如何)是个好主意吗?,redis,Redis,Redis文档和谷歌搜索通常很少显示关于这个问题的信息,这让我觉得这可能不是一个好主意,或者可能有一些问题 基本上,我有一些非常大的排序集和时间序列数据(分数是unix时间)。我需要查询潜在的大时间间隔,并对数据进行一些后处理。我想评估在不同的负载场景下,迭代查询排序集而不是单个请求/响应对性能的影响。这可能很好,因为:它可以在较短的时间内锁定Redis(有点像扫描比键更好),我可以在数据仍在检索时更早地并行开始后处理,并且在使用它之前,我不需要在内存中加载完整的数据集,相反,数据可以在处理时丢

Redis文档和谷歌搜索通常很少显示关于这个问题的信息,这让我觉得这可能不是一个好主意,或者可能有一些问题

基本上,我有一些非常大的排序集和时间序列数据(分数是unix时间)。我需要查询潜在的大时间间隔,并对数据进行一些后处理。我想评估在不同的负载场景下,迭代查询排序集而不是单个请求/响应对性能的影响。这可能很好,因为:它可以在较短的时间内锁定Redis(有点像扫描比键更好),我可以在数据仍在检索时更早地并行开始后处理,并且在使用它之前,我不需要在内存中加载完整的数据集,相反,数据可以在处理时丢弃

Redis文档没有展示如何在ZRANGEBYSCORE上使用LIMIT的示例,我可以考虑两种方法:

1) 固定范围,可变限制

ZRANGEBYSCORE my-sorted-set 1000000 2000000 LIMIT 0 10000
ZRANGEBYSCORE my-sorted-set 1000000 2000000 LIMIT 10000 10000
ZRANGEBYSCORE my-sorted-set 1000000 2000000 LIMIT 20000 10000
ZRANGEBYSCORE my-sorted-set 1000000 2000000 LIMIT 30000 10000
相同的分数范围,但移动偏移量

2) 可变范围,固定限制

ZRANGEBYSCORE my-sorted-set 1000000 2000000 WITHSCORES LIMIT 0 10000
ZRANGEBYSCORE my-sorted-set 1010000 2000000 WITHSCORES LIMIT 0 10000
ZRANGEBYSCORE my-sorted-set 1020000 2000000 WITHSCORES LIMIT 0 10000
ZRANGEBYSCORE my-sorted-set 1030000 2000000 WITHSCORES LIMIT 0 10000
在这里,我用上一次迭代的最大得分调整
min
。在这两种情况下,当结果长度小于计数时,我将停止迭代

其中有一个比另一个好吗?有没有什么我错过的好主意,或者是一个坏主意


谢谢

从你写的第一个选项来看,实际分数对你来说似乎并不重要。 这意味着您的第二个选项将浪费您一些处理周期,并使用不必要的网络

在任何情况下,我建议对你使用的极限进行一点试验。您可以降低slowlog阈值,并查看每次调用的Redis CPU时间。(
CONFIG SET slowlog log慢于0
将记录所有传入请求。默认值为10000微秒)


顺便说一句,您应该同时检查数据类型和。很可能其中至少有一个会给您提供更好的功能。

ZSCAN可以让您以非阻塞方式迭代排序集:是的,我看到了,但是ZSCAN遍历了整个排序集,无法指定范围。@Pablote您检查过RedistemSeries.io吗?