gpt4 book ai didi

node.js - Redis 连接从关闭事件中消失

转载 作者:IT王子 更新时间:2023-10-29 05:57:56 24 4
gpt4 key购买 nike

在我们的 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);
}

示例日志

[2012-07-11 08:21:29.545] [FATAL] Production - Connection Terminated on end to 'x.x.x.9' '6399'
[2012-07-11 08:21:29.803] [INFO] Production - Connection Successfully Established to 'x.x.x.9' '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 的情况下,是否有其他方法可以触发关闭事件?

或者我们应该从我们的 redis 端检查一些东西?我们在 debug 级别监控我们的 redis 日志,我们没有发现任何与此问题相关的有用内容

当我们在 Debug模式下运行 node-redis 时,我们可以清楚地看到客户端因请求堆积在命令队列中而停滞不前。我们记录了 why and queue length里面flush_on_error功能。我们保留了offline_queuing禁用。

样本日志

Redis connection is gone from close event. offline queue 0 command queue 8

请求失败的响应时间:30388 毫秒 [这因命令队列中的等待而异。第一个排队的人有最长的响应时间,后面的人响应时间较短]

通常的响应时间:1 毫秒

PS:我们已经提交了 issue在 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)
}();

考虑到它每 3 分钟只调用一次,这对性能来说应该不是问题 ;)

关于node.js - Redis 连接从关闭事件中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com