代码之家  ›  专栏  ›  技术社区  ›  auhuman

使用lambda或s3或api网关的AWS无服务器重置缓存

  •  2
  • auhuman  · 技术社区  · 8 年前

    我有一个无服务器python lambda函数(lambda1),它与api网关和s3集成。所以当用户点击 GET /names 在api网关上,lambda读取S3中的CSV文件并返回响应。CSV文件很大,因此lambda需要很长时间才能响应。因此添加了一个 List

    我还有另一个lambda(lambda2),当有一个新的CSV文件上传到同一个s3 bucket中时,它会被调用,并处理CSV文件以进行审计。

    所以我有3个重置缓存的想法。但想知道重置缓存的正确或更好的方法。

    1. lambda1的S3通知事件
    2. 调用lambda2中的处理程序重置lambda1 buy中的缓存
    3. 在api网关中有一个端点来重置缓存,并从lambda2调用端点
    1 回复  |  直到 8 年前
        1
  •  1
  •   Arafat Nalkhande    8 年前

    如果由于流量原因,AWS为您的Lambda创建了多个容器,那么您列出的3种方法都不起作用。因为如果发生这种情况,那么您的所有方法最终将只触发其中一个容器,并且只有该容器将得到更新的缓存,但其余的仍将过时。

    相反,您可以做的是缓存 lastModified 时间戳也在Lambda中,在提供任何请求之前,检查S3文件的时间戳。如果它与缓存的时间戳不同,则表示上载了一个新文件,您可以使用最新的CSV更新缓存。

    通过这种方法,您的响应时间将增加一点(额外的时间来检查时间戳),但至少您将始终提供最新的修改内容