Redis 连接检查

Shi*_*ara 2 redis node.js node-redis

我是 azure 中的 Redis 缓存新手。我试图在向客户端变量写入数据之前检查其连接。我怎样才能在 Nodejs 中实现这一点?

我尝试获取 client.connected 状态,但是当我进行负面测试时 - 例如关闭 redis 服务器, client.connected 变量没有收到任何内容,因此我的代码不会进一步从我的原始数据中获取数据服务器,通过缓存服务器。

我怎样才能在nodejs中做到这一点?

Tua*_*ran 6

redis有一个PING命令。你可以试试redis.ping()检查redis服务器的连接是否正常

来自 redis 文档:

如果未提供参数,则返回 PONG,否则批量返回参数的副本。此命令通常用于测试连接是否仍然有效,或测量延迟。

如果客户端订阅了通道或模式,它将返回第一个位置有“pong”的多块,第二个位置有空块,除非提供了参数,在这种情况下它返回一个副本的论点。


Kyl*_*Mit 5

为了在使用redisnpm 包时进行可靠的连接检查,您应该使用重试逻辑,处理就绪事件,并在必要时 ping 进行内部检查。

重试

创建客户端时,会自动有一个默认的重试策略,但是您可以传入选项对象来自retry_strategy定义它,如下所示:

const client = require('redis').createClient({

  retry_strategy: function(options) {
    if (options.error && options.error.code === "ECONNREFUSED") {
      // End reconnecting on a specific error
      return new Error("The server refused the connection");
    }
    if (options.total_retry_time > 1000 * 60 * 60) {
      // End reconnecting after a specific timeout
      return new Error("Retry time exhausted");
    }
    if (options.attempt > 10) {
      // End reconnecting with built in error
      return undefined;
    }

    // reconnect after
    return Math.min(options.attempt * 100, 3000);
  },

});
Run Code Online (Sandbox Code Playgroud)

准备好

创建客户端后,您应该在继续之前监听连接和其他事件,如下所示:

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

client.on('connect'     , () => console.log('connect'));
client.on('ready'       , () => console.log('ready'));
client.on('reconnecting', () => console.log('reconnecting'));
client.on('error'       , () => console.log('error'));
client.on('end'         , () => console.log('end'));
Run Code Online (Sandbox Code Playgroud)

正如 redis 包文档中提到的,节点客户端和官方 redis 命令之间存在1 对 1 的命令映射,因此您可以通过这样的调用来进行最终的冒烟测试:ping

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

client.on('ready', () => {
    let response = client.ping()
    console.log(response)
    // do other stuff
});
Run Code Online (Sandbox Code Playgroud)

进一步阅读