我正在运行Redis,并使用ezmobius的Redis gem1从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
发布于 2010-12-13 23:20:00
我刚刚在我的后台工作程序中注意到了同样的事情,它们将任务存储在Redis的队列中,并通过Redis pub/sub进行通信。谷歌的结果表明,如果你在多个线程中使用相同的Redis对象,就会发生这种情况。我不确定在我的应用程序中是否存在这种情况,我将不得不对此进行调查(但我确实有一些线索)。
发布于 2010-12-21 19:26:17
我遇到了一个稍微类似的问题
Errno::EAGAIN: Resource temporarily unavailable - Timeout reading from the socket原来,我的redis-server在连接时的超时设置为300秒。5分钟后,redis关闭了与我的工作人员的连接,他们正在记录上面的错误。
如果你的套接字超时是每隔x秒发生一次,那么它无疑会扼杀你的“空闲”连接!
发布于 2010-12-20 23:08:54
初始化连接时,请确保传递:thread_safe选项:
Redis.connect(:thread_safe => true)https://stackoverflow.com/questions/3711953
复制相似问题