Redis连接检查

时间:2019-11-12 21:57:12

标签: node.js redis node-redis

我是天蓝色的Redis Cache的新手。我试图在将数据写入客户端变量之前检查其连接。 如何在Node.js中实现此目标?

我尝试获取client.connected状态,但是当我进行负面测试时(例如关闭redis服务器),client.connected变量未接收任何信息,因此我的代码不再获取eh数据从我的原始服务器通过传递缓存服务器。

如何在nodejs中做到这一点?

3 个答案:

答案 0 :(得分:0)

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

来自redis文档:

  

如果未提供任何参数,则返回PONG;否则,批量返回该参数的副本。此命令通常用于测试连接是否仍处于活动状态或测量延迟。

     

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

答案 1 :(得分:0)

要在使用redis npm软件包时进行可靠的连接检查,应使用重试逻辑,处理ready事件,并在必要时ping进行肠道检查。

重试

创建客户端时,会自动提供一个默认重试策略,但是您可以将options objectretry_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);
  },

});

就绪

创建客户端后,您应先收听connection and other events,然后再执行以下操作:

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'));

Ping

如redis软件包文档中所述,节点客户端和1 to 1 mapping of commands之间有一个official redis commands,因此您可以通过调用ping进行最终的冒烟测试,如下所示:< / p>

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

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

进一步阅读

答案 2 :(得分:0)

来自npm docs

<块引用>

“准备好了”

一旦建立连接,客户端将发出就绪信号。命令 在就绪事件排队之前发出,然后在之前重放 发出此事件。

所以这可以通过下面的代码片段来实现:

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

client.on("ready", function() {  
  console.log("Connected to Redis server successfully");  
});