2010-09-14 118 views
1

我正在運行Redis並使用ezmobius的Redis gem [1]從Ruby進行連接。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的發佈/訂閱通信。谷歌的結果表明,如果你從多個線程使用同一個Redis對象,就會發生這種情況......我不確定在我的應用程序中是否出現這種情況,我必須對此進行調查(但我確實有線程在那裏)。

0

當初始化連接時,請務必通過:thread_safe選項:

Redis.connect(:thread_safe => true) 
1

我有一個稍微類似的問題與

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

事實證明,我的Redis服務器已超時設置連接300秒。 5分鐘後,Redis正在與我的工作人員建立聯繫,他們正在記錄上述錯誤。

如果您的套接字超時每隔x秒發生一次,毫無疑問,它會阻止您的「閒置」連接!