2017-02-17 87 views
0

如何将连接池添加到我的Redis设置?如何为Redis-As-Rails-Cache(使用Redis作为rails缓存)实现连接池Rails 4.1?

由于某种原因,我似乎无法找到关于此的任何信息。我使用的设置,像这样的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-rails(5.0.1)运行两个redis实例,一个用于resque(1.25.2),另一个用于缓存层。我已经更新了上面的设置示例。我怀疑在初始化时配置错了,或者有一个基本的设置不匹配。

UPDATE 2017年2月16日@ 21-37EST:

environments/development.rb

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

+0

尽管我发现了一些示例,告诉我如何使用ConnectionPool.new,但我不确定如何使用以下语法在config/application.rb中配置将其挂接到Rails缓存:'''config。 cache_store =:redis_store,“redis:// localhost:6379/0/cache”''' –

+0

也想在这里添加一个后续操作,我无法获得有关Resque的连接池工作情况;它在Resque代码中出错。 (但是在尝试实例化一个基本的Redis.new对象时,我已经能够获得一个基本的ConnectionPool,它使用'''gem'connection_pool''''。但是,你会在'''config/application.rb' ''Rails'缓存存储由'''config配置。cache_store''',我不知道如何添加连接池) –

+0

http://stackoverflow.com/questions/28113940/what-is-the-best-way-to-use-redis-in-a -multi-threaded-rails-environment-puma – Sooraj

回答

0

确定这里是我的工作是什么。

添加到我的Gemfile

gem 'connection_pool'

对于导轨CACHE:

为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,包括协议,用户名,密码,主机和端口。另一种方法是将这些作为自己的参数在散列中传递)。

我仍在使用Resque设置上连接池的正确语法。当我找到一个时,会更新这个答案。