NodeJS-Redis连接事件

我的目标如下:

  • 仅在程序开始时一次连接到Redis实例。
  • b()连接方法,以便文件可以module.exports建立该对象并启动连接。然后将生成的客户端“传递”到其他模块。
  • 如果连接断开,则将引发相应的异常并进行相应的处理。

我可以使前两个工作。但是,我不确定如何在项目源代码中处理Redis 其他地方的其他事件。

示例:

require我正在与connect-once.js连接,以便调用函数可以async完成连接。

await

const redis = require('redis') // async function clientOperations(options) { let connObject = {} let redisClient = redis.createclient(options) return new Promise((resolve,reject) => { redisClient.on('error',(err) => { connObject = { cacheclient: {},connected: false } reject(connObject) }) // redisClient.on('connect',() => { connObject = { cacheclient: redisClient,connected: true } resolve(connObject) }) }) } // async function connect(options) { return new Promise(async (resolve,reject) => { try { let p = await clientOperations(options) resolve(p) } catch(e) { reject(e) } }) } // module.exports = { connect }

init.js

在上面的代码片段中,当const cache = require('connect-once') let cacheclient = await cache.connect() // const bizlogic = require('some-biz-logic') await bizlogic.addcustomer({cacheclient : cacheclient,payload : express.req.payload}) 中的Redis连接断开时会发生什么?也许,我也在想“过程编程”。我很好奇知道如何连接一次,与项目的其余部分共享连接以及在项目中某处使用该连接时处理任何连接错误。

diwukongjian 回答:NodeJS-Redis连接事件

我建议在redis上使用ioredis     npm i ioredis https://github.com/luin/ioredis#auto-reconnect

默认情况下,当与Redis的连接丢失时,ioredis将尝试重新连接,除非关闭连接 手动通过redis.disconnect()或redis.quit()。

使用retryStrategy选项非常灵活地控制断开连接后等待多长时间:

var redis = new Redis({
  // This is the default value of `retryStrategy`
  retryStrategy: function(times) {
    var delay = Math.min(times * 50,2000);
    return delay;
  }
});

示例connect-once.js

const Redis = require('ioredis');

let connObject;

//
async function clientOperations(options) {
    if (connObject && connObject.connected) {
        return connObject;
    }
    let redisClient = Redis({
        host: options.host,port: options.port,password: options.password,lazyConnect: true,});
    await redisClient.connect();
    connObject = {
        cacheClinet: redisClient,connected: true
    }
    return connObject;
}

//
async function connect(options) {
    return clientOperations(options);
}
//
module.exports = { connect }
本文链接:https://www.f2er.com/3077111.html

大家都在问