我创建了简单的增量计数器,如下所示。
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");
});
}
}
每当我测试这个函数时,我会按预期获得递增值。
这是正确的方法还是我需要在云数据库中存储计数器?
答案 0 :(得分:15)
当您第一次调用Lambda函数时,AWS会在后台引导容器。
当您多次调用Lambda函数时, MIGHT 会获得相同的容器以优化运行持续时间和设置延迟。
您不能依赖此行为,但您必须意识到它存在。
对于全局变量,如果你需要在Lambda中运行逻辑,那么它应该在多个函数中同时调用相同的代码,因此应该被锁定在lambda代码(DB或缓存)之外的某个地方。 / p>
此致
答案 1 :(得分:2)
我遇到了同样的问题,最后我使用AWS Elasticache服务(Memcached)来存储(密钥,值)对。它快速,易于使用(至少来自python)并且可靠。
否则我完全赞同托马斯,你应该知道它可能会引起问题,但不要相信这个&#34;功能&#34;。