如何为 Redis-As-Rails-Cache(使用 Redis 作为 rails 缓存)Rails 4.1 实现连接池?

How do I implement connection pooling for Redis-As-Rails-Cache (using Redis as rails cache) Rails 4.1?

如何将连接池添加到我的 Redis 设置中?

出于某种原因,我似乎找不到任何相关信息。我正在使用像这样设置的 redis (3.2.0): (您可以假设 resque_uri 和 cache_uri 已在此 c 之前解析)

重新请求:

$REDIS_BACKGROUND_JOB =  Redis.new(:host => resque_uri.host, 
                                  :port => resque_uri.port, 
                                  :password => resque_uri.password)

稍后在初始化序列中,我们做

Resque.redis = $REDIS_BACKGROUND_JOB

我们有第二个 Redis 实例,它具有不同的内存、连接限制和逐出策略,用于 Rails 缓存

$REDIS_CACHE = Redis.new(:host => cache_uri.host, 
                        :port => cache_uri.port, 
                        :password => cache_uri.password)

更新 2017-02-16@20-17EST:我是 运行 两个 redis 实例,一个用于 resque (1.25.2),另一个用于使用 redis-rails 的缓存层( 5.0.1).我已经更新了上面的设置示例。我怀疑初始化中配置错误或基本设置不匹配。

更新 2017-02-16@21-37EST:

environments/development.rb

config.cache_store = :redis_store, 'redis://localhost:6379/1/cache_store'

好的,这就是我的工作。

已添加到我的 Gemfile

gem 'connection_pool'

对于 RAILS 缓存:

为 Rails 缓存初始化 $REDIS_CACHE = Redis.new 是不正确的,因为 Rails 在环境文件的 config.cache_store 设置中执行此操作(config/environments/development.rbconfig/environments/production.rb, 等等)

然后我在我的环境文件中初始化如下:

config.cache_store = :redis_store, ENV["REDISCLOUD_FOR_RAILS_CACHE_URL"], {pool_size: 10, pool_timeout: 10}

(您会注意到 ENV["REDISCLOUD_FOR_RAILS_CACHE_URL"] 被设置为完整的 URI,包括协议、用户名、密码、主机和端口。另一种方法是将这些作为自己的参数传递到散列中.)