Tam*_*mil 5 redis node.js node-redis
在我们的redis配置中,我们设置了超时:7秒
在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);
}
Run Code Online (Sandbox Code Playgroud)
样本日志
[2012-07-11 08:21:29.545] [FATAL]生产-连接终止端上为'xxx9' '6399'
[2012-07-11 08:21:29.803] [INFO]生产-连接成功建立' xxx9''6399'
但在某些情况下(最有可能的Redis正在关闭不通知客户端的连接),我们看到的命令队列越来越越积越多,并请求占用过多的时间来作出答复,直到时间节点Redis的客户能够感知的关闭事件].在所有这些情况下,返回带有此错误的命令回调Redis connection gone from close event.即使经过这么多等待.由于没有触发通常的结束事件,因为超时看起来好像这不是问题.
问题似乎与此类似 - http://code.google.com/p/redis/issues/detail?id=368
这是redis中发生的已知事情吗?
有没有办法指定执行命令[发送和接收回复]不应超过阈值并在这种情况下回复错误,而不是让客户端停止?
或者在socket_timeout这样的情况下是否还有另一种触发close事件的方法?
或者我们应该从redis方面检查一下?我们监控了我们的redis日志debug级别,我们发现与此问题无关
当我们在调试模式下运行node-redis时,我们显然能够看到客户端因命令队列中堆积的请求而停滞不前.我们在flush_on_error函数中记录了原因和队列长度.我们一直禁用offline_queuing.
样本日志
Redis连接已从关闭事件中消失.offline queue 0命令队列8
请求失败的响应时间:30388 ms [根据命令队列中的等待而变化.第一个排队的人有最大的响应时间和跟随他的人较少]
通常的Resonse时间:1毫秒
PS:我们也在node_redis中提出了一个问题
我们在使用 Redis 时也遇到了很多连接问题。看起来它会在不通知客户端的情况下关闭连接。我们注意到这可能是服务器上的超时问题。这是我们使用的解决方案,自 7 月以来我们没有遇到过问题。
var RETRY_EVERY = 1000 * 60 * 3;
var startTimer = function(){
console.log('Begin the hot tub!')
setInterval(function(){
try{
client.set('hot',new Date());
console.log(client.get('hot'))
}
catch(e){
console.log(e);
}
},RETRY_EVERY)
}();
Run Code Online (Sandbox Code Playgroud)
考虑到每 3 分钟只调用一次,这对性能来说应该不是问题;)
| 归档时间: |
|
| 查看次数: |
5019 次 |
| 最近记录: |