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

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

【问题讨论】:

  • 一个疑问,为什么需要连接池

标签: node.js redis connection-pooling


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

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