Redis连接在Azure上丢弃

时间:2018-06-08 07:22:24

标签: azure docker redis node-redis

我的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端配置?

1 个答案:

答案 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。