即使 redis-server 停止,Redis 连接仍然有效 在没有 retry_strategy 选项的情况下重新启动。
const conn = redis.createClient({
host: 'redisUrl',
port: 'redisPort',
...
socket_keepalive : true
});
redisClient.on('connect', () => {
console.log(`connect`);
}).on('error', () => {
console.log(`error`);
});
为什么?
是的,
node-redis
确实有一个默认策略,如其README中所述。 但是,现在所有这些都已被弃用,取而代之的是 retry_strategy
函数。
具体来说,查找
retry_max_delay
、connect_timeout
和 max_attempts
。
retry_max_delay null 已弃用 请使用 retry_strategy 代替。默认情况下,每次客户端尝试连接并失败时,重新连接延迟几乎加倍。此延迟通常无限增长,但设置 retry_max_delay 将其限制为以毫秒为单位提供的最大值。
connect_timeout 3600000 已弃用 请使用 retry_strategy 代替。设置connect_timeout限制客户端连接和重新连接的总时间。该值以毫秒为单位,从创建新客户端或连接丢失时开始计算。最后一次重试将恰好在超时时间发生。默认是尝试连接,直到超出默认系统套接字超时,然后尝试重新连接,直到 1 小时过去。
max_attempts 0 已弃用 请使用 retry_strategy 代替。默认情况下,客户端将尝试重新连接,直到连接为止。设置 max_attempts 限制连接尝试的总数。将其设置为 1 将阻止任何重新连接尝试。
自 2022 年以来。连接到 REDIS 客户端时发生了很多变化(或者让我说我有连接到 REDIS 客户端的首选方法)。
我发现了一个非常有用的 Github 链接,其中讨论了 REDIS createClient 方法所需的各种选项。
首先,retry_strategy在我的代码中不起作用,所以我研究并发现了socket.reconnectStrategy。
reconnectStrategy 选项采用函数作为其值。该函数返回一个数字或一个错误。该函数接受一个参数(重试次数)。由于我使用的是 TypeScript,因此我的函数必须返回数字或错误。
这就是我在代码中实现它的方式。
let client: redis.RedisClientType = redis.createClient({
socket: {
host: "127.0.0.1",
port: 6379,
reconnectStrategy: (retries: number): number | Error => {
if (retries > 10) {
console.log("Too many retries on REDIS. Connection Terminated");
return new Error("Too many retries.");
} else {
return retries;
}
},
},
password: "",
disableOfflineQueue: false,
});