Redis:奇怪的协议/网络错误

时间:2010-09-14 18:47:45

标签: ruby-on-rails ruby networking redis

我正在使用ezmobius的Redis gem [1]运行Redis并从Ruby连接。

我会定期(大约每天一次)在我的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

3 个答案:

答案 0 :(得分:1)

我刚才注意到我的后台工作人员也是如此,他们将任务存储在Redis的队列中,并通过Redis pub / sub进行通信。谷歌的结果表明,如果你从多个线程使用相同的Redis对象,就会发生这种情况...我不确定我的应用程序是否就是这种情况,我将不得不对此进行调查(但我确实有线程) )。

答案 1 :(得分:1)

我与

有一个类似的问题
Errno::EAGAIN: Resource temporarily unavailable - Timeout reading from the socket

事实证明,我的redis-server在连接上的超时设置为300秒。 5分钟后,redis终止了与我的工作人员的连接,他们正在记录上面的错误。

如果您的套接字超时每x秒发生一次,那么毫无疑问,redis会杀死您的“空闲”连接!

答案 2 :(得分:0)

初始化连接时,请务必通过:thread_safe选项:

Redis.connect(:thread_safe => true)