Node.js Redis 连接池

Posted

技术标签:

【中文标题】Node.js Redis 连接池【英文标题】:Node.js Redis Connection Pooling 【发布时间】:2014-03-25 10:29:45 【问题描述】:

当使用node_redis Node.js 模块和 Redis 时,我应该只使用一个连接,因为 Redis 是单线程进程,还是应该创建一个连接池来提高性能?

【问题讨论】:

一个疑问,为什么需要连接池 【参考方案1】:

实际上,有一个用于池化多个连接的用例:阻止 BRPOP 和 SUBSCRIBE 等命令。

【讨论】:

VPhantom,这是有用的信息,但请包含对 OP 问题的完整答案。 我还没有将generic-pool与Redis一起使用,所以我无法制定更完整的答案。我只是点击了“添加评论”,但似乎因为我是新人,所以我输入的内容最终成为了一个完整的答案。那不是我的意图。 :( 事实上,阻塞命令会阻塞你的连接,所以如果你在阻塞 XREAD 或 XREADGROUP 时尝试执行诸如 XADD 之类的命令,你的添加将被阻塞,直到读取解除阻塞...跨度> 【参考方案2】:

只需使用单个连接。 Node 和 Redis 都是有效单线程。我认为拥有多个连接不会获得任何好处。在开始使用 Redis 开发之前,我问了一个类似的问题,似乎一个客户端/一个应用程序是非常有效的模式。

【讨论】:

如果我正在运行一个长期存在的节点网络服务器,我是否应该只创建一个客户端并让它运行,而无需在其上运行 .end.quit @oskarth 是的。我已经在生产中做了很多年了。调用.quit 的唯一原因是如果你想出于某种原因优雅地关闭你的进程(.end 相当残酷,我避免使用它)。 如果您使用PUBLISH/SUBSCRIBEWATCH,那么您将需要一个单独的连接。 如果我只使用,我还需要池化吗: var batch = redis_client.batch();批处理.set(键,值);批处理.发布(键,值);批处理.exec(); 这个答案可以附在这个页面上。 Node.js with Redis。页面摘录由于 Node.js 和 Redis 都是有效的单线程,因此无需使用多个客户端实例或任何池机制,除了少数例外;

以上是关于Node.js Redis 连接池的主要内容,如果未能解决你的问题,请参考以下文章

node.js如何配置mongodb连接池?

Node.js实现MySQL数据库连接池

如何在 node.js 中的模块之间共享连接池?

node.js mysql 池 beginTransaction & 连接

深入解析Node.js使用MySQL连接池

如何在 Node js 中承诺一个 mysql 池连接?