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

Zha*_* Yi 7 amazon-web-services aws-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];
};

Run Code Online (Sandbox Code Playgroud)

当我运行 lambda 时,我可以read from cache在日志中看到,这意味着 lambda 在缓存内存中缓存了一些值。当 lambda 变热时,它的记忆会保留吗?这是否意味着我可以利用该内存进行一些缓存以提高性能?

Chr*_*ams 9

可以在 Lambda 调用之间保留某些内容(假设调用访问同一个 MicroVM),但您的应用程序不应依赖它来提高性能。

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


Far*_*fer 3

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

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

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

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

  1. 由 lambda 的多次调用创建的不同 lambda 容器之间缺乏同步将导致存储相同的数据以及缓存中已存储数据的许多丢失。
  2. 如果缓存中的数据已增加到 lambda 处理所需的内存耗尽水平,可能会导致 lambda 完全停止工作。