2017-02-17 6 views
0

Как добавить пул соединений в мою настройку Redis?Как реализовать пул соединений для Redis-As-Rails-Cache (используя Redis as rails cache) Rails 4.1?

по какой-то причине я не могу найти информацию об этом. Я использую Redis (3.2.0) Настройка следующим образом: (можно предположить, resque_uri и cache_uri был разобран перед этим с)

для Resque:

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

позже в последовательности инициализации , мы делаем

Resque.redis = $REDIS_BACKGROUND_JOB 

у нас есть 2-й экземпляр 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). Я обновил приведенные выше примеры установки. Я подозреваю, что что-то неправильно сконфигурировано при инициализации или существует принципиальное несоответствие настроек.

UPDATE 2017-02-16 @ 21-37EST:

environments/development.rb имеет

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

+0

Хотя я нашел несколько примеров, показывающих, как использовать ConnectionPool.new, я не уверен, как подключить его к кешу Rails, как это было настроено в config/application.rb, используя этот синтаксис: '' 'config. cache_store =: redis_store, "redis: // localhost: 6379/0/cache" '' ' –

+0

Также хотелось добавить в качестве продолжения здесь, что я не могу заставить пул соединений работать с Resque вообще; это ошибка внутри кода Resque. (Но я смог получить базовый ConnectionPool, работающий с '' 'gem 'connection_pool'''' при попытке создать экземпляр базового объекта Redis.new. Однако, как вы заметите в' '' 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

OK вот что я получил работу.

добавил к моему Gemfile

gem 'connection_pool'

Для КЭШ рельсам:

Инициализация $REDIS_CACHE = Redis.new для кэша Rails является неправильным, поскольку Rails делает это внутри установки config.cache_store в файлах среды (config/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, включая протокол, имя пользователя, пароль, хост и порт. Альтернативой является передать их каждый в качестве своего собственного параметра здесь в хеш.)

Я все еще работаю над правильным синтаксисом для объединения пулов в настройке Resque. Обновит этот ответ, когда найду его.