lambda是否在内存中保留任何数据



我在AWS lambda:中有以下代码


const cache = {};
exports.handler = async (event) => {
// TODO implement
if (cache[event.key]) {
console.log('read from cache');
return cache[event.key];
}
console.log('generate value');
cache[event.key] = Math.random()

return cache[event.key];
};

当我运行lambda时,我可以在日志上看到read from cache,这意味着lambda在缓存内存中缓存一些值。lambda在变热时是否保持其内存?这是否意味着我可以利用这些内存进行一些缓存以提高性能?

可以在Lambda调用之间持久化(假设调用命中同一个MicroVM(,但您的应用程序不应该依赖它来获得性能。

无法保证它在MicroVM上持续多久,也要注意存储在内存中的卷,因为如果没有足够的内存,这可能会影响Lambda的性能。如果你想提高性能,请查看以下选项:

  • Systems Manager参数存储-如果需要存储单个键/值组合,请使用此选项
  • DynamoDB-如果您需要许多键/值组合,请使用此选项
  • Elasticache-如果您需要一个支持许多复杂数据类型的内存键/值存储,请使用此选项。这需要将Lambda添加到VPC中

Lambda容器即使在调用完成后仍保持活动状态。因此,装载在容器内存中的任何数据都将在整个Lambda容器生命周期中可用。

因此,该内存可以用作缓存的杠杆。

缓存中的数据在您的应用程序读取范围很广的情况下会很有用。例如,在必须从数据库中提取相同用户名的情况下,我们可以缓存用户名以备将来调用。因此,降低了数据库查询的成本。

上述方法似乎有帮助,但也有一些缺点:

  1. 由多次调用lambda创建的不同lambda容器之间缺乏同步将导致存储相同的数据,并导致缓存中已存储数据的许多未命中
  2. 如果缓存中的数据已增加到lambda处理所需的内存耗尽级别,则可能导致lambda完全停止工作

最新更新