【问题标题】:node_redis: is SMEMBERS blocking?node_redis:SMEMBERS 阻塞了吗?
【发布时间】:2015-02-26 00:28:46
【问题描述】:

在 Redis 的 SCAN 文档下,它提到了 SMEMBERS

然而,虽然像 SMEMBERS 这样的阻塞命令能够在给定时刻提供属于 Set 的所有元素,但 SCAN 系列命令仅对返回的元素提供有限的保证,因为我们增量迭代的集合可能会在期间发生变化迭代过程。

令人惊讶的是,我找不到任何有关 SMEMBERS 如何阻止以及何时避免使用它的其他信息。如果 SMEMBERS 是阻塞调用,那么在 node_redis 中使用是否安全,或者阻塞 Redis 最终也会阻塞 Node 的线程?

有点相关,如果SSCAN 是最佳做法而不是调用 SMEMBERS,是否有对 SINTER 的等效 SCAN 调用?

提前致谢

【问题讨论】:

    标签: node.js redis node-redis


    【解决方案1】:

    几乎所有 Redis 的命令都是阻塞的,包括 SCAN(但它保证了较短的执行时间)。唯一非阻塞的命令是由其他线程执行的命令(目前仅与持久性相关,例如 BGSAVE)。

    具体来说,SMEMBERS 正在阻塞。如果您的 Set 不是太大(可能有几个 K(。如果 Set 变得太大,Redis 将在准备回复时阻塞,并在发送回之前消耗一个 RAM 来缓冲它。在这种情况下,建议使用 SSCAN 遍历 Set,以允许其他请求在对它的调用之间交错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多