1

私はRedisを実行しており、ezmobiusのRedisgem[1]を使用してRubyから接続しています。

定期的に(約1日1回)、Redisが奇妙な結果を返すことにより、Railsアプリで一連の例外が発生します。

多くの場合、次のような例外によってトリガーされます。

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サーバーを再起動する必要があります。私はFedoraCore8、Rails 2.3.8、Redisgem2.0.3を実行しています。system_timergemをインストールしました。誰かが私がこれらのエラーを止める方法について何か考えを持っていますか?

[1] Redisの宝石

4

3 に答える 3

1

Redis のキューにタスクを保存し、Redis pub/sub を介して通信するバックグラウンド ワーカーでも同じことに気付きました。Google の結果は、複数のスレッドから同じ Redis オブジェクトを使用すると、これが発生する可能性があることを示唆しています...私のアプリでこれが当てはまるかどうかはわかりません。これを調査する必要があります (ただし、そこにスレッドがあります) )。

于 2010-12-13T15:19:59.853 に答える
1

少し似た問題がありました

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

結局のところ、私の redis-server では接続のタ​​イムアウトが 300 秒に設定されていました。5 分後、redis はワーカーへの接続を切断し、上記のエラーをログに記録していました。

ソケットのタイムアウトが x 秒ごとに発生している場合、redis が「アイドル」接続を強制終了していることは間違いありません。

于 2010-12-21T11:26:16.613 に答える
0

:thread_safe接続を初期化するときは、次のオプションを渡すようにしてください。

Redis.connect(:thread_safe => true)
于 2010-12-20T15:08:54.147 に答える