You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node Redis服务宕机时错误回调重复触发,如何设置仅触发一次?

问题根因

node-redis 默认开启了自动重连机制,每次重连失败都会触发 error 事件,因此会持续打印错误日志。

实现单次宕机通知的方案

方案1:添加状态标记位(推荐,不影响自动重连)

通过标记位控制仅第一次报错时触发通知,服务恢复后自动重置标记,下次宕机可再次触发通知:

var redis = require("redis");
var client = redis.createClient();
// 错误通知状态标记
let isRedisDownNotified = false;

client.on("error", function(error) {
  if (!isRedisDownNotified) {
    console.log("Redis 服务已宕机");
    // 此处可添加自定义告警逻辑,如推送、邮件通知等
    isRedisDownNotified = true;
  }
});

// 连接恢复时重置标记
client.on("connect", function() {
  if (isRedisDownNotified) {
    console.log("Redis 服务已恢复连接");
    isRedisDownNotified = false;
  }
});

方案2:关闭自动重连(适合不需要自动恢复的场景)

直接关闭客户端的自动重连逻辑,报错后不会再尝试重连,error 事件仅触发一次:

node-redis v3 版本配置:

var client = redis.createClient({
  retry_strategy: function() {
    // 返回false关闭自动重连
    return false;
  }
});

node-redis v4+ 版本配置:

var client = redis.createClient({
  socket: {
    reconnectionStrategy: false
  }
});

注意:该方案关闭自动重连后,Redis 恢复服务后客户端不会主动重新连接,需要手动触发重连。

方案3:单次事件绑定

通过 once 方法绑定单次 error 监听,连接恢复后重新绑定监听:

var redis = require("redis");
var client = redis.createClient();

function bindRedisErrorListener() {
  client.once("error", function(error) {
    console.log("Redis 服务已宕机");
    // 自定义告警逻辑
  });
}

// 初始化绑定错误监听
bindRedisErrorListener();

// 连接恢复后重新绑定单次监听
client.on("connect", function() {
  console.log("Redis 服务已恢复连接");
  bindRedisErrorListener();
});

内容的提问来源于stack exchange,提问作者Shai UI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:27:04