我的redis实例正在Azure VM上的docker容器中运行。我从本地应用程序以及我的Azure应用程序连接到同一个实例。两者都具有完全相同的代码库,但是在两个环境中的一些空闲时间之后,如果我尝试运行我的Azure应用程序,它就会变得无法响应。如果我检查redis日志,它只显示2个客户端(其中1个是cli本身)。所以我看到Azure的redis连接已经结束,但在我的Azure App日志中没有记录连接结束。我正在使用node_redis连接到APP的redis。我正在使用重试策略,如node_redis上的示例。
retry_strategy: function (options) {
if (options.error && options.error.code === 'ECONNREFUSED') {
// End reconnecting on a specific error and flush all commands with
// a individual error
return new Error('The server refused the connection');
}
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return undefined;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
我是否缺少需要完成的任何Azure端配置?
答案 0 :(得分:0)
最后我找到了一个解决方案,我希望没有其他人在这种情况下陷入困境。 在以下链接的帮助下,我能够确定问题。 https://serverfault.com/questions/661704/azure-closing-idle-network-connections
解决方案: 将redis.conf中的tcp_keepalive设置为小于240 使用redis-cli的命令:
<f1 >f2 somecommand 2>f3
并使用
检查设置<f1 >f2 2>f3 somecommand
由于Azure服务器没有完全关闭连接,只是更改了连接的映射,我们的客户端没有获得结束事件或触发retry_strategy。