【发布时间】:2018-06-14 22:46:31
【问题描述】:
问题/我是如何遇到的
我正在 Node.JS 中编写一个批处理 Lambda 函数,它在两个不同的地方调用 Redis。一些批处理项目可能永远不会到达第二个 Redis 调用。这一切都是异步发生的,所以如果我在批处理队列为空时立即关闭连接,任何未来的 Redis 调用都会失败。如何关闭连接?
我的尝试
process.on('beforeExit', callback) -- 不会被调用,因为事件循环仍然包含 Redis 连接
client.unref() -- 如果没有待处理的命令,则关闭连接。不处理未来的电话。
- client.on('idle', callback) -- 有效,但已弃用,可能仍会错过未来的通话
我目前在做什么
一旦批处理队列为空,我调用:
intervalId = setInterval(closeRedis, 1000);
我关闭Redis连接并在超时后清除回调中的间隔:
function closeRedis() {
redis.client('list', (err, result) => {
var idle = parseClientList(result, 'idle');
if (idle > timeout) {
redis.quit();
clearInterval(intervalId);
}
});
}
这种方法主要是有效的,但如果只是检查超时,仍然有可能其他进程正在进行,并且将来可能会进行 Redis 调用。当事件循环中只剩下一个空闲连接时,我想关闭连接。有没有办法做到这一点?
【问题讨论】:
标签: node.js redis aws-lambda node-redis