我有一个无服务器的python函数(lambda1),它与api网关和s3集成在一起。因此,当用户在api网关上访问GET /names时,lambda读取S3中的CSV文件并返回响应。CSV文件很大,因此lambda需要大量时间来响应。因此,在python中添加了一个List来在内存中缓存CSV文件,以减少响应时间。现在,当我上传一个新的CSV文件时,我希望API从新的CSV返回新的响应,但是由于缓存,它不会(lambda并不经常关闭,因为速度很高)
我还有另一个lambda (lambda2),当有一个新的CSV文件上传到同一个s3桶中并处理CSV文件以进行审计时,就会调用它。
所以我有三个想法来重置缓存。但是想知道正确或更好的方法来重置缓存。
发布于 2017-11-22 05:45:40
如果AWS由于通信量的原因为Lambda创建了多个容器,那么列出的3种方法都不起作用。因为如果发生这种情况,那么所有的方法最终都只会触发一个容器,只有那个容器会得到更新的缓存,但是剩下的仍然会过时。
相反,您可以做的是在Lambda中缓存lastModified时间戳,在处理任何请求之前检查S3文件的时间戳。如果它与缓存的时间戳不一样,那么它意味着上传了一个新文件,您可以使用最新的CSV更新缓存。
使用这种方法,您的响应时间将增加一些(用于检查时间戳的额外时间),但至少您将始终提供修改后的最新内容。
https://stackoverflow.com/questions/47425538
复制相似问题