【发布时间】:2021-02-12 01:47:15
【问题描述】:
希望有人能给我一些建议
我创建了一个模块,它基本上使用单例模式创建了一个 redis 连接,该模式也使用了 Promise。
但是,在我返回 redis 连接之前,我首先检查连接是否准备好,在 ready 事件上,我解决了 Promise,同样,如果出现任何错误,我会拒绝 Promise。
我唯一关心的是这种方法,我是否可以在监听器功能就绪时引入内存泄漏,并且在承诺完成后错误可能会继续监听,应该由垃圾收集器清理。
我不确定这是否会造成某种内存泄漏..
任何建议将不胜感激。
从'redis'导入redis; 从'redis-redisearch'导入redisearch; 重新搜索(redis); 让 redisClient: redis.RedisClient = null; 导出函数 getRedisClient(): Promise { return new Promise((resolve: any, reject: any) => { if (redisClient && redisClient.connected) { 返回解析(redisClient); } redisClient = redis.createClient({ 密码:process.env.REDIS_PASSWORD, 重试策略:功能(选项){ if (options.error && options.error.code === "ECONNREFUSED") { // 在特定错误上结束重新连接并刷新所有命令 // 单个错误 return new Error("服务器拒绝连接"); } 如果 (options.total_retry_time > 1000 * 60 * 60) { // 在特定超时后结束重新连接并刷新所有命令 // 有一个单独的错误 return new Error("重试时间用完"); } if (options.attempt > 10) { // 以内置错误结束重新连接 返回未定义; } // 之后重新连接 返回 Math.min(options.attempt * 100, 3000); }, }); redisClient.on("ready", function (error: any) { console.log("连接良好"); 返回解析(redisClient); }); redisClient.on("error", function (error: any) { console.log("拒绝错误"); 如果(redisClient){ redisClient.end(false); redisClient = null; 返回拒绝(错误); } }); }) }【问题讨论】:
标签: javascript typescript redis node-redis