AWS lambda是否存储全局变量?

时间:2017-04-19 07:24:15

标签: javascript node.js aws-lambda

我创建了简单的增量计数器,如下所示。

import java.util.concurrent.CompletionStage;
import java.util.function.Function;
import javax.inject.Inject;
import akka.stream.Materializer;
import play.mvc.*;


public class GlobalHeaders extends Filter {

    @Inject
    public GlobalHeaders(Materializer mat) {
        super(mat);
    }

    @Override
    public CompletionStage<Result> apply(Function<Http.RequestHeader, CompletionStage<Result>> nextFilter,Http.RequestHeader requestHeader) {

        return nextFilter.apply(requestHeader).thenApply(result -> {
            return result.setHeader("Access-Control-Allow-Origin", "*")
                    .setHeader("Allow", "*")
                    .setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
                    .setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent");
        });
    }
}

每当我测试这个函数时,我会按预期获得递增值。

这是正确的方法还是我需要在云数据库中存储计数器?

2 个答案:

答案 0 :(得分:15)

当您第一次调用Lambda函数时,AWS会在后台引导容器。

当您多次调用Lambda函数时, MIGHT 会获得相同的容器以优化运行持续时间和设置延迟。

您不能依赖此行为,但您必须意识到它存在。

对于全局变量,如果你需要在Lambda中运行逻辑,那么它应该在多个函数中同时调用相同的代码,因此应该被锁定在lambda代码(DB或缓存)之外的某个地方。 / p>

此致

答案 1 :(得分:2)

我遇到了同样的问题,最后我使用AWS Elasticache服务(Memcached)来存储(密钥,值)对。它快速,易于使用(至少来自python)并且可靠。

否则我完全赞同托马斯,你应该知道它可能会引起问题,但不要相信这个&#34;功能&#34;。