Rails 应用程序中的 Redis::TimeoutError

Posted

技术标签:

【中文标题】Rails 应用程序中的 Redis::TimeoutError【英文标题】:Redis::TimeoutError in Rails application 【发布时间】:2015-06-07 06:16:40 【问题描述】:

我的应用程序中不断出现 Redis::Timeout 错误(在 UI 和后台作业中)。我正在为 Redis 使用 AWS ElastiCache 服务。

这就是我创建 Redis 连接的方式。在我的 config/application.rb 中,我有:

$redis = Redis.new(host: REDIS_HOST, port: REDIS_PORT, db: REDIS_DB)

如何避免出现超时错误?我使用的默认连接设置如下:

> $redis.client.options[:reconnect_attempts]
 => 1 
> $redis.client.options[:timeout]
 => 5.0 
> $redis.client.options[:tcp_keepalive]
 => 0 
> $redis.client.options[:inherit_socket]
 => false

【问题讨论】:

在什么情况下会出现超时?有什么尝试吗? 它偶尔发生,我无法可靠地重现它。发送异常通知时我就知道了。 当这种情况发生时,您能否检查您的 Ruby 应用程序的内存使用情况?垃圾收集器运行时会发生这种情况吗? 你解决了吗? 哪个 Redis gem 以及它在什么上下文中使用(即,您的 Redis 连接是否包装在不同的库/gem 中?Redis 服务器是本地的吗?您是否使用 ssl 隧道进行 Redis 连接?) ?您是否考虑过使用更多的重新连接尝试(即,iodine 的 Redis 引擎无限尝试重新连接,将任何未发送的消息保留在内部队列中)? 【参考方案1】:

您应该在Connection Pool Gem 的帮助下汇集您的 Redis 连接,如果问题仍然存在,请增加超时值:

ConnectionPool.new(size: 5, timeout: 3) Redis.new(:host => 'localhost', :port => 6379, :db => 1, :timeout => 240)

Redis Gem

【讨论】:

以上是关于Rails 应用程序中的 Redis::TimeoutError的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Webpacker 中使用 Rails Url 助手/Rails 5.1 中的 React-rails

Rails 3 中的 Restful API

带有 websocket_rails gem 的 rails 应用程序中的方法 broadcast_message 不起作用

rails 3中的api身份验证

rails 3.1邮件程序中的asset_url

我的 Rails 应用程序中的随机 MySQL 异常