【发布时间】:2020-02-13 11:10:55
【问题描述】:
我使用 node-redis 已经有一段时间了,到目前为止一切都很好。但是,在设置新环境时,我的主机名(或密码)输入错误,无法连接。但是因为这是我前段时间开发的一个已经可以运行的应用程序,所以很难跟踪实际问题。当您向该服务器发出请求时,它只需要服务器超时 5 分钟,然后返回错误 500。
最后我发现这是redis服务器的凭据。我使用 redis 通过阻止重新验证安全令牌长达一个小时(因为验证过程可能需要长达 2000 毫秒)来使我的应用程序更快,因此我将令牌存储在 redis 上以供将来请求。
这多年来一直运行良好,但是,只是因为这次我在主机名或密码上输入错误,我注意到如果 redis 服务器无法连接(无论出于何种原因),整个应用程序都会崩溃。这个想法是,如果可用,应该使用 redis,如果没有,它应该回退到只走很长的路,但无论如何都要满足请求。
所以我的问题是,如何告诉node-redis尽快抛出错误,而不是等到ETIMEOUT错误来?
例如:
const client = redis.createClient(6380, "redis.host.com", { password: "verystrongone" } });
client.on("error", err => {
console.log(err)
})
根据此代码,我在达到超时(大约 30-40 秒)后收到 console.log 错误。这不好,因为那时我的应用程序至少有 30 秒没有响应。我想要实现的是,如果redis出现故障或其他情况,它应该在2-5秒后放弃。我使用来自 Azure 的非常快速且可靠的 redis 服务器。连接只需不到一秒的时间,而且我相信从未失败过,但如果失败了,它将占用整个应用程序。
我尝试了retry_strategy 之类的东西,但我相信该选项仅在最初的约 30 秒尝试后才会生效。
有什么建议吗?
【问题讨论】:
标签: node.js azure redis node-redis