Node.js Redis连接池技术

29

使用node_redis模块连接Redis时,由于Redis是单线程进程,我应该仅使用一个连接还是创建连接池以提高性能?


1
一个疑问,为什么需要连接池? - guy_fawkes
2个回答

24

只使用单个连接。无论是Node还是Redis都是实际上是单线程的。我认为使用多个连接并没有什么好处。在开始使用Redis之前,我曾经问过类似的问题,而一个客户端/一个应用程序似乎是非常有效的模式。


1
如果我正在运行一个长时间运行的节点Web服务器,那么我应该只创建一个客户端并让它保持活动状态,而不必在其上运行.end.quit吗? - oskarth
4
@oskarth 是的,我已经在生产环境中这样做了好几年了。调用.quit的唯一原因是如果您想以某种方式优雅地关闭进程(.end相当野蛮,我避免使用它)。 - stockholmux
3
如果您使用 PUBLISH/SUBSCRIBE 或者 WATCH 命令,那么您需要单独建立一个连接。 - Martin Ždila
@MuhammadHassan 不需要使用池化。batch是一种语言结构,使用publish发布不会阻塞客户端。 - stockholmux
1
这个答案可以通过这个页面得到证实。Node.js with Redis。以下是该页面的摘录:“由于Node.js和Redis都是有效的单线程,因此除了一些例外情况外,没有必要使用多个客户端实例或任何池化机制。” - Master Chief
显示剩余3条评论

11

实际上,有一个需要汇集多个连接的应用场景:像BRPOP和SUBSCRIBE这样的阻塞命令。


VPhantom,这是有用的信息,但请包括对OP问题的完整回答。 - Hank D
1
我还没有使用过与Redis一起的generic-pool,因此我无法给出更完整的答案。我只是点击了“添加评论”,但似乎因为我是新手,我输入的内容最终成为了完整的答案。这不是我的本意。:( - VPhantom
1
实际上,阻塞命令会阻止您的连接,因此如果您尝试执行诸如XADD之类的命令,而同时又有一个阻塞的XREAD或XREADGROUP,则您的添加操作将被阻止,直到读取操作解除阻塞... - Serge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接