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

时间:2017-02-17 00:44:18

标签: ruby ruby-on-rails-4 redis resque redis-rails

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

由于某些原因,我似乎无法找到任何有关此信息的信息。我正在使用redis(3.2.0)设置如下: (您可以假设resque_uri和cache_uri已在此c之前解析)

resque:

$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)

UPDATE 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'

1 个答案:

答案 0 :(得分:1)

好的,这就是我的工作。

添加到我的Gemfile

gem 'connection_pool'

对于RAILS CACHE:

为Rails缓存初始化$REDIS_CACHE = Redis.new是不正确的,因为Rails在环境文件config.cache_storeconfig/environments/development.rb等的config/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,包括协议,用户名,密码,主机和端口。另一种方法是将这些作为自己的参数传递给哈希。)