所以redis gem应该是线程安全的,这很好。但我想知道我需要如何设置它。我正在使用jRuby和Celluloid(使用默认光纤)。
我现在使用它的方式是我定义了一个全局方法:
def redis
@_redis ||= Redis.new(...)
end
我将Redis客户端的超时参数设置为30.我不认为我有任何线程安全问题(我在生成线程之前将其初始化),但是有时候我开始得到 Redis :: TimeoutError 错误,所以我想知道这些线程是否会永远保持开放连接并最终占用所有可用的连接?
基本上问题是有时我会得到Redis :: TimeoutError。有没有办法可以检查哪些连接在某个时刻打开?或者任何想法可能是什么问题?
由于
答案 0 :(得分:1)
这里的问题是,redis客户端专门锁定(你可以通过测量1,2,3等线程命令所需的时间来验证它,它很可能是线性的)。
这里有两种解决方案: