redis - 大型集合的 SSCAN 与 SMEMBERS 资源使用情况

标签 redis set

我有一个很大的 redis 集合(超过 600 万个条目),我需要遍历所有条目并对每个条目进行一些其他的 redis 操作(主要是使用基于原始键的键在 redis 排序集中调用 ZCARD输入)。

遍历 SET 的所有条目的最有效(就资源而言)方式是什么?使用 SSCAN 或进行 SMEMEBERS 调用。

最佳答案

SMEMBERS 在一次操作中返回 SET 中的所有成员。此操作的持续时间与 SET 中的项数成正比(时间复杂度:O(N) )。

在此操作期间,您的实例不会响应任何其他请求。

SSCAN 允许您遍历 SET 中的所有项目。时间复杂度是固定的 ( O(1) ),具体取决于您在每次调用时获得的项目数(此数字由 COUNT 参数定义)。 SSCAN 的总成本可能与 SMEMBERS 的数量级相同,或者可能更高,因为您将不得不进行多次调用。但它会允许在两次调用之间处理其他请求,因此您的 Redis 实例不会看起来没有响应。

所有这些都是纯理论。要获得明确的建议,您应该进行测试和测量,这应该很容易做到。

关于redis - 大型集合的 SSCAN 与 SMEMBERS 资源使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005422/

相关文章:

c# - 使用 ServiceStack.Redis 对高容量场景的意外回复

python - 是否可以在 Redis 中按值获取数据?

java-8 - Java 流收集器对给定流进行排序

algorithm - 查找需要排除以匹配预期总和的求和问题的项

spring-boot - Spring Data Redis 覆盖默认序列化器

redis - 使用正确的 Redis 数据类型进行基于时间的比较

asp.net-mvc - 更新 nuget 后 StackExchange.Redis.Extensions 错误

c++ - 从 set<A*,Comparator> 获取 A 成员到 list<A>

swift - 将集合保存到核心数据中

Java : Iterating a Set in ibatis