2015-04-02 3 views
11

Я постоянно получаю ошибку Redis :: Timeout в своем приложении (как в пользовательском интерфейсе, так и в фоновых заданиях). Я использую службу AWS ElastiCache для Redis.Redis :: Приложение TimeoutError in Rails

Вот как я создаю соединение Redis. В моем config/application.rb у меня есть:

$redis = Redis.new(host: REDIS_HOST, port: REDIS_PORT, db: REDIS_DB) 

Как я могу избежать получения ошибок таймаута? Я использую настройки соединения по умолчанию следующим образом:

> $redis.client.options[:reconnect_attempts] 
=> 1 
> $redis.client.options[:timeout] 
=> 5.0 
> $redis.client.options[:tcp_keepalive] 
=> 0 
> $redis.client.options[:inherit_socket] 
=> false 
+1

При каких обстоятельствах вы получаете тайм-ауты? При любой попытке? – soveran

+1

Это случается спорадически, и я не смог воспроизвести его надежно. Я узнаю об этом, когда отправляется уведомление об исключении. –

+1

Можете ли вы проверить использование памяти вашего приложения Ruby, когда это произойдет? Это происходит, когда работает сборщик мусора? – soveran

ответ

0

Вы должны объединить свои связи Redis с помощью Connection Pool Gem и увеличить значение тайм-аута, если проблема не устранена:

ConnectionPool.new(size: 5, timeout: 3) {Redis.new({:host => 'localhost', :port => 6379, :db => 1, :timeout => 240})} 

Redis Gem

Смежные вопросы