node_redis:是SMEMBERS阻塞吗?

时间:2015-02-25 15:53:27

标签: node.js redis node-redis

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

  

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:3)

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

具体来说,SMEMBERS正在阻止。如果您的Set不是太大(可能是几K)(例如,如果Set变得太大,Redis将在准备回复时阻塞,并且在发送回来之前将使用RAM来缓冲它。在这种情况下,使用SSCAN迭代Set是可取的,允许其他请求在对它的调用之间交错。