我有一个很大的 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/