node-redis retry_strategy 有默认值吗?

问题描述 投票:0回答:2

即使 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.js redis node-redis
2个回答
3
投票

是的,

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 将阻止任何重新连接尝试。


2
投票

自 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,
    });
© www.soinside.com 2019 - 2024. All rights reserved.