繁体   English   中英

在AWS Lambda上处理未初始化或错误的Redis连接

[英]Handling uninitialized or erroneous Redis connection on AWS Lambda

我的情景

我正在尝试利用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连接的错误(初始化,超时和运行时)的正确方法?

Lambda函数被设计为无状态,所以我不知道是否有一个最好的答案。 关于Lambda和RDS有一个非常有用的GitHub评论 ,但它主要适用。 它提到答案取决于它将要发出多少请求。

无论如何, 这个SO答案或多或少都会如此; 虽然我更喜欢Redis库的基于Promise的API。 作者使用回调来处理未初始化连接问题,等待连接打开后再尝试使用连接。 你提出的其他两个问题也在SO答案中处理。 基本上: if (err) callback(err)

我的意思是,鉴于GitHub评论消息来自AWS的支持,您需要在处理程序内部建立连接,因此您也可以在那里进行,直到您确定需要性能提升为止。

我意识到这并没有完全回答这个问题,但问题已经开放了好几天了,我很好奇。 并且没有什么比在互联网上找错了找到合适的答案......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM