生产使用

为您的 Node.js 应用做好生产准备

以下部分解释了如何处理生产环境中可能发生的情况。

错误处理

Node-Redis 提供了多种事件来处理各种情况,其中最关键的是 error 事件。

当客户端内部发生错误时,此事件会被触发。

监听错误事件至关重要。

如果客户端未注册至少一个错误监听器且发生错误,系统将抛出该错误,可能导致 Node.js 进程意外退出。更多详细信息请参阅EventEmitter 文档

const client = createClient({
  // ... client options
});
// Always ensure there's a listener for errors in the client to prevent process crashes due to unhandled errors
client.on('error', error => {
    console.error(`Redis client error:`, error);
});

处理重新连接

如果网络问题或其他问题意外关闭套接字,客户端将拒绝所有已发送的命令,因为服务器可能已经执行了它们。其余待处理的命令将保留在内存队列中,直到建立新的套接字。此行为由 enableOfflineQueue 选项控制,该选项默认启用。

客户端使用 reconnectStrategy 来决定何时尝试重新连接。默认策略是根据尝试次数计算每次尝试前的延迟,计算方式为 Math.min(retries * 50, 500)。您可以通过向 reconnectStrategy 选项传递支持的值来定制此策略

  1. 定义回调函数 (retries: number, cause: Error) => false | number | Error(推荐)
const client = createClient({
  socket: {
    reconnectStrategy: function(retries) {
        if (retries > 20) {
            console.log("Too many attempts to reconnect. Redis connection was terminated");
            return new Error("Too many retries.");
        } else {
            return retries * 500;
        }
    }
  }
});
client.on('error', error => console.error('Redis client error:', error));

在提供的重新连接策略回调中,客户端最多尝试重新连接 20 次,每次尝试之间延迟 retries * 500 毫秒。大约两分钟后,如果超出最大重试限制,客户端将记录错误消息并终止连接。

  1. 使用数值来设置固定的毫秒延迟。
  2. 使用 false 禁用重新连接尝试。此选项仅应用于测试目的。

超时

要设置连接超时,请使用 connectTimeout 选项

const client = createClient({
  socket: {
    // setting a 10-second timeout  
    connectTimeout: 10000 // in milliseconds
  }
});
client.on('error', error => console.error('Redis client error:', error));
评价此页面
回到顶部 ↑