【问题标题】:SSCAN vs SMEMBERS resources usage for large sets大型集的 SSCAN 与 SMEMBERS 资源使用情况
【发布时间】:2016-10-12 18:03:46
【问题描述】:

我有一个大的 redis SET(超过 6M 条目),我需要遍历所有条目并对每个条目进行一些其他 redis 操作(主要是使用基于原始的键在 redis Sorted Set 中调用 ZCARD条目)。

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

【问题讨论】:

    标签: redis set


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      SMEMBERS 必须遍历整个集合并一次生成整个键列表,而 SSCAN 每次调用它时都会返回一小部分键。虽然它们所做的工作量几乎相同,但 SSCAN 以更小的块完成工作,这意味着对于大多数用例而言,它对服务器正在执行的其他所有操作的性能影响较小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 2021-08-18
        相关资源
        最近更新 更多