【发布时间】:2012-01-04 10:40:54
【问题描述】:
我正在使用REDIS.hmget 匹配一堆字符串。完整的商店有大约 140k 键。我已经在不到 1 秒的时间内看到我的后端匹配超过 1k 个字符串,但是我遇到了这种特殊情况,即匹配在完成之前就超时了。我得到以下崩溃跟踪:
Errno::ETIMEDOUT: Connection timed out
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/connection/ruby.rb:58:in `write'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/connection/ruby.rb:58:in `write'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:139:in `process'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:138:in `each'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:138:in `process'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:250:in `ensure_connected'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:137:in `process'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:206:in `logging'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:136:in `process'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis/client.rb:46:in `call'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis.rb:755:in `hmget'
/usr/ruby1.8.7/lib/ruby/1.8/monitor.rb:242:in `synchronize'
.bundle/gems/ruby/1.8/gems/redis-2.2.2/lib/redis.rb:754:in `hmget'
虽然超时,但 hmget 仍然返回它到目前为止匹配的内容,这似乎在 2 到 2.3k 个字符串之间变化。就像我之前说的,我在不到 1 秒的时间内看到了超过 1k 个字符串的后端匹配,所以我很难想象 2.3k 个字符串会使 Redis 超时,除非它仅在几秒钟后超时。
这里有什么我可能会遗漏的吗?我应该将比赛分成两个较小的比赛吗?有没有办法改变默认的超时间隔?
【问题讨论】:
标签: ruby-on-rails performance redis