【发布时间】:2018-06-16 16:09:37
【问题描述】:
我的场景
我正在尝试利用 Node.js 的全局范围来初始化一次数据库连接,并在调用 lambda 函数时使用初始化的连接。
这可以节省大量资源和时间,因为打开数据库连接是一个漫长的过程:
// Global scope: Runs only once
const redis = require('redis');
const client = redis.createClient({ <HOST>, <PORT> });
// Function scope: runs per invocation
exports.handler = (event, context, callback) => {
do-something-with-redis
};
我的问题
可能会出现一些常见的连接错误
-
未初始化的连接:由于 Node.js 是异步的,函数可能会在
redis.create返回之前开始执行代码,因此使用未初始化的连接。 - 超时:如果连接尝试由于某种原因超时,该函数将有一个错误的处理程序。
- 运行时错误:如果在代码执行过程中发生连接错误,则后续调用将有一个错误的处理程序。
我的问题
克服 AWS Lambda 函数使用的全局 Redis 连接的错误(初始化、超时和运行时)的正确方法是什么?
【问题讨论】:
-
似乎命令在断开连接时排队并在(重新)连接后重播。否则,您可以使用
client发出的事件。 github.com/NodeRedis/node_redis#connection-and-other-events
标签: node.js scope aws-lambda