Shi*_*ara 2 redis node.js node-redis
我是 azure 中的 Redis 缓存新手。我试图在向客户端变量写入数据之前检查其连接。我怎样才能在 Nodejs 中实现这一点?
我尝试获取 client.connected 状态,但是当我进行负面测试时 - 例如关闭 redis 服务器, client.connected 变量没有收到任何内容,因此我的代码不会进一步从我的原始数据中获取数据服务器,通过缓存服务器。
我怎样才能在nodejs中做到这一点?
redis有一个PING
命令。你可以试试redis.ping()
检查redis服务器的连接是否正常
来自 redis 文档:
如果未提供参数,则返回 PONG,否则批量返回参数的副本。此命令通常用于测试连接是否仍然有效,或测量延迟。
如果客户端订阅了通道或模式,它将返回第一个位置有“pong”的多块,第二个位置有空块,除非提供了参数,在这种情况下它返回一个副本的论点。
为了在使用redis
npm 包时进行可靠的连接检查,您应该使用重试逻辑,处理就绪事件,并在必要时 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)
归档时间: |
|
查看次数: |
20425 次 |
最近记录: |