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

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

我定期(大约每天一次)在我的Rails应用程序中得到一系列exception,这些exception由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

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

我有一个类似的问题

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

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

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

初始化连接时,请确保传递:thread_safe选项:

 Redis.connect(:thread_safe => true)