2010-09-14 2 views
1

Я запускаю Redis и подключаюсь из Ruby с помощью драгоценного камня Redis от ezmobius [1].Redis: странные протокольные/сетевые ошибки

Периодически (примерно раз в день) Я получаю серию исключений в приложении Rails, вызванном Redis, возвращающим странные результаты.

Они часто вызваны исключением таких на это:

Redis::ProtocolError: Protocol error, got '3' as initial reply byte       

или

Redis::ProtocolError: Protocol error, got '9' as initial reply byte      

или иногда

Errno::EAGAIN: Resource temporarily unavailable - Timeout reading from the socket 

Это обычно требует перезагрузки моих серверов Rails, чтобы очистить проблемы с подключением. Я запускаю Fedora Core 8, Rails 2.3.8, Redis gem 2.0.3. У меня установлена ​​система system_timer gem. У кого-нибудь есть идеи, как я могу остановить эти ошибки?

[1] Redis gem

ответ

1

Я просто заметил то же самое в моем фоне рабочих, которые хранят задачи в очередях в Redis, а также общаться через Redis паб/суб. Результаты Google показывают, что это может произойти, если вы используете один и тот же объект Redis из более чем одного потока ... Я не уверен, что это так в моем приложении, мне придется исследовать это (но у меня есть потоки там).

0

При инициализации соединения, убедитесь, чтобы передать :thread_safe вариант:

Redis.connect(:thread_safe => true) 
1

у меня был немного аналогичный вопрос с

Errno::EAGAIN: Resource temporarily unavailable - Timeout reading from the socket 

Оказывается, мой Redis-сервер был тайм-аут установлен 300 секунд при подключении. Через 5 минут redis убивал связь с моими работниками, и они регистрировали ошибку выше.

Если ваш тайм-аут гнезда происходит каждые х секунд, его, без сомнения, ожидают убийства вашего «холостого» соединения!