Node.js – Redis 中的 retry_strategy 属性

node.jsserver side programmingprogramming

retry_strategy 是一个函数,它接收对象作为参数,包括重试次数、total_retry_time(表示上次连接后经过的时间)、导致连接丢失的错误以及总的 times_connected 次数。

如果此函数返回一个数字,则下一次重试将在该时间之后以毫秒为单位进行;如果返回非数字,则不会再进行重试

语法

retry_strategy: funciton(options)

示例 1

创建一个名为"retryStrategy.js"并复制以下代码。 创建文件后,使用命令"node retryStrategy.js"运行此代码,如下例所示

// retry_strategy 属性演示示例

// 导入 redis 模块
const redis = require("redis");

// 创建使用 retry_strategy 的 redis 客户端
const client = redis.createClient({
   retry_strategy: function(options) {
      if (options.error && options.error.code === "ECONNREFUSED") {
          // 如果 redis 拒绝连接或无法连接
         return new Error("服务器拒绝连接");
      }
      if (options.total_retry_time > 1000 * 60 * 60) {
          // 在指定时间限制后结束重新连接
         return new Error("重试时间已耗尽");
      }
      if (options.attempt > 10) {
          // 重新连接并返回内置错误
         return undefined;
      }
      // 之后重新连接
      return Math.min(options.attempt * 100, 3000);
   },
});

console.log("Connection created successfully !")
client.set("key", "TutorialsPoint");

// 这将返回一个 JavaScript 字符串
client.get("key", function(err, reply) { 
   console.log(reply);
});

输出

Connection created successfully!
TutorialsPoint

如果无法与 Redis 建立连接,则会引发以下错误。

Error: Redis connection in broken state: retry aborted.
   at RedisClient.connection_gone
(/home/redis/node_modules/redis/index.js:569:30)
   at RedisClient.on_error
(/home/redis/node_modules/redis/index.js:346:10)
   at Socket.<anonymous>
(/home/redis/node_modules/redis/index.js:223:14)
   at Socket.emit (events.js:198:13)
   at emitErrorNT (internal/streams/destroy.js:91:8)
   at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
   at process._tickCallback
(internal/process/next_tick.js:63:19)

相关文章