【发布时间】:2016-10-08 01:12:00
【问题描述】:
背景:我有一个 Ruby/Rails + Nginx/Unicorn Web 应用程序,它连接到多个 Redis DB(即我没有使用Redis.current,而是使用全局变量来进行不同的连接)。我知道当创建新的 Unicorn 工作人员时,我需要在 after_fork 块中创建一个新连接,如 here 和 here 所述。
我的问题是关于连接池的需要。根据this SO 线程,“在 Unicorn 中,每个进程都会建立自己的连接池,因此如果您的数据库池设置为 5,并且您有 5 个 Unicorn 工作者,那么您最多可以有 25 个连接。但是,由于每个unicorn worker 一次只能处理一个连接,那么除非您的应用程序在内部使用线程,否则每个 worker 实际上只会使用一个 db 连接......池大小大于 1 意味着每个 Unicorn worker 都可以访问它无法使用的连接,但它实际上不会打开连接,所以没关系。”
由于我没有使用 Sidekiq,我什至需要为我的 Redis 连接使用连接池吗?池大小为 1 的连接池有什么好处吗?或者我应该简单地使用具有单个连接的变量 - 例如Redis.new(url: ENV["MY_CACHE"])?
【问题讨论】:
标签: ruby-on-rails redis connection-pooling unicorn