我是天蓝色的Redis Cache的新手。我试图在将数据写入客户端变量之前检查其连接。 如何在Node.js中实现此目标?
我尝试获取client.connected状态,但是当我进行负面测试时(例如关闭redis服务器),client.connected变量未接收任何信息,因此我的代码不再获取eh数据从我的原始服务器通过传递缓存服务器。
如何在nodejs中做到这一点?
答案 0 :(得分:0)
redis有一个PING
命令。您可以尝试redis.ping()
检查与Redis服务器的连接是否正常
来自redis文档:
如果未提供任何参数,则返回PONG;否则,批量返回该参数的副本。此命令通常用于测试连接是否仍处于活动状态或测量延迟。
如果客户端订阅了频道或模式,则它将返回一个多批量,第一个位置带有“ pong”,第二个位置带有一个空批量,除非在这种情况下提供了参数返回参数的副本。
答案 1 :(得分:0)
要在使用redis
npm软件包时进行可靠的连接检查,应使用重试逻辑,处理ready事件,并在必要时ping进行肠道检查。
创建客户端时,会自动提供一个默认重试策略,但是您可以将options object与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);
},
});
创建客户端后,您应先收听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'));
如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");
});