AWS Lambda中简单缓存的超时时间是多少?

时间:2019-06-22 16:50:45

标签: amazon-web-services api caching aws-lambda

因此,我正在寻找适用于我的AWS Lambda函数的缓存解决方案,并且发现了一种称为“简单缓存”的东西。由于我的数据不经常更改,因此非常适合我的需求。但是,我无法找到该缓存的超时时间是一件事。函数何时刷新数据,有什么办法可以控制它?

该函数使用的代码示例:

let cachedValue;

module.exports.handler = function(event, context, callback) {
    console.log('Starting Lambda.');

    if (!cachedValue) {
        console.log('Setting cachedValue now...');
        cachedValue = 'Foobar';
    } else {
        console.log('Cached value is already set: ', cachedValue);
    }
};

1 个答案:

答案 0 :(得分:1)

您在这里所做的就是利用容器重用的副作用。这些值将持续多长时间没有下限或上限,也无法保证它们将持续存在。这是一种有效的优化方法,但完全超出了您的控制范围。

重要的是,您需要注意,这会将值存储在一个容器中。它在容器中的Node进程有效之前一直存在,并且只要以后调用该函数在该容器中重用该进程,就可以访问它。

如果您同时运行同一函数的两个或多个调用,则它们将不在同一容器中,并且它们将不会看到彼此的全局变量。这并不是说它是无效的技术,但是您需要意识到这一事实。 /tmp/目录将表现出非常相似的行为,这就是为什么使用它时需要清理它的原因。

如果引发任何异常,则在下一次调用时,无论哪种方式,缓存的值都将被破坏,因为每个容器只有一个Node进程。

如果您在未定义/未记录的分钟数内根本不调用该函数,则该容器将被服务释放,因此消失了。

重新部署功能也会清除此“缓存”,因为新功能版本不会重复使用旧功能版本的容器。

这是一个非常有效的策略,只要您意识到它是黑匣子的功能,并且没有用户可维修的零件即可。

另请参阅https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/-已有数年历史但仍然准确的帖子。