Redis: странные ошибки протокола / сети - PullRequest
1 голос
/ 14 сентября 2010

Я использую Redis и подключаюсь из Ruby, используя ezmobius's Redis gem [1].

Периодически (примерно раз в день) я получаю серию исключений в моем приложении 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. У кого-нибудь есть идеи, как я могу остановить эти ошибки?

[1] Redis gem

Ответы [ 3 ]

1 голос
/ 21 декабря 2010

У меня была немного похожая проблема с

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

Оказывается, у моего сервера redis было время ожидания 300 секунд на соединения.Через 5 минут redis разрывал соединение с моими работниками, и они регистрировали ошибку выше.

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

1 голос
/ 13 декабря 2010

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

0 голосов
/ 20 декабря 2010

При инициализации соединения обязательно передайте опцию :thread_safe:

Redis.connect(:thread_safe => true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...