【问题标题】:Redis: weird protocol/network errorsRedis:奇怪的协议/网络错误
【发布时间】:2011-04-12 08:02:48
【问题描述】:

我正在运行 Redis 并使用 ezmobius 的 Redis gem[1] 从 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

【问题讨论】:

    标签: ruby-on-rails ruby networking redis


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我有一个稍微类似的问题

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

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

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

      【讨论】:

        【解决方案3】:

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

        Redis.connect(:thread_safe => true)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-21
          • 2013-12-14
          • 1970-01-01
          • 2012-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-27
          相关资源
          最近更新 更多