走在我们的redis的配置中,我们已经设置超时时间:7秒Redis的连接从接近事件
在node_redis我们处理Redis的连接准备和结束事件作为
client.on("ready", function() {
logger.info("Connection Successfully Established to ", this.host, this.port);
}
client.on("end", function() {
logger.fatal("Connection Terminated to ", this.host, this.port);
}
样品日志
[2012-07-11 08:21:29.545] [致命]生产 - 连接终止 结束于'xxx9''6399'
[2012-07-11 08:21:29.803] [INFO]生产 - 连接成功建立'xxx9“6399”
但在某些情况下(最有可能的Redis正在关闭不通知客户端的连接),我们看到了越来越command queue堆积和请求正在太多时间才能得到响应[直到node-redis客户端能够感知关闭事件的时间]。在所有这些情况下,命令回叫将返回此错误Redis connection gone from close event
。即使在等待之后。看起来好像这不是问题,因为通常的结束事件没有被触发。
问题似乎与此类似 - http://code.google.com/p/redis/issues/detail?id=368
这是一个已知的东西在Redis的发生?
有没有一种方法可以指定执行命令[发送和接收回复]不应该超过阈值,并在这种情况下回复错误,而不是让客户端停滞?
或者是否有其他方式在socket_timeout等情况下触发close事件?
或者我们应该从我们的redis端检查什么?我们在debug
级别监视了我们的redis日志,并且我们发现没有任何与此问题相关的有用内容
当我们在调试模式下运行node-redis时,我们清楚地看到客户端被阻塞,请求堆积在命令中队列。我们在函数内记录了why and queue length。我们保持禁用offline_queuing。
样本记录
Redis的连接从关闭事件了。 离线队列0 命令队列失败的请求的8
响应时间:30388个MS [此变化按照在命令队列的等待。第一个排队的人有下列他较少]
平常Resonse时间最大响应时间和那些:1毫秒
PS:我们已经在node_redis提起issue太
任何反馈?你没有标记正确的答案 – oconnecp 2014-01-08 09:22:42