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