我正在使用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
答案 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)