caching - 如何在内容更新时使动态内容的 CloudFront 缓存失效

标签 caching amazon-cloudfront aws-api-gateway

我正在使用 AWS Lambda、API Gateway 和 CloudFront 开发 Web API。
CloudFront 目前用作 API Gateway 某些端点的反向代理,缓存行为完全被禁用。

有几个常用的 API,其中内容很少更新(例如每周一次或每月一次),因此可以进行缓存以加快响应时间。

但是,我想知道如何在内容更新时使经常使用但很少更新动态内容的此类 CloudFront 缓存失效。
我的观察是,CloudFront 保留旧内容的缓存,因为 CloudFront 不会将请求传递到 API 源,直到缓存达到 max-age。

例如:假设我有一个 GET/projects/PROJECT_ID/members API。
项目成员很少更新,但一旦通过 PUT/projects/PROJECT_ID/members API 添加/删除成员,缓存应失效以提供项目成员的最新更新内容。

我是否应该使用 invalidation API 使非常特定的 URL(上面的示例中的 /projects/ABC/members)失效?每次更新其内容后(PUT/projects/ABC/members 调用)?
或者,我应该避免缓存此类动态内容吗?

最佳答案

您有两个选择:

1-每次有人编辑您的成员列表时调用失效 API。 例如,如果有人添加/删除/编辑成员列表(不是获取请求),您应该调用 Cloudfront 中的失效 API 并使路径失效

/projects/PROJECT_ID/members

2-控制API端的缓存,有时您也可以为某些资源设置 header 以在Cloudfront中缓存。

有关 CloudFront 失效 API 的更多信息,请查看以下链接

https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html

关于caching - 如何在内容更新时使动态内容的 CloudFront 缓存失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49705089/

相关文章:

javascript - 关闭 fabricjs 图像对象的缓存

java - 为什么这个缓存不能使用 final 作为修饰符

ruby-on-rails - 将 S3/CloudFront 与 Rails 3 Assets 和更少的 CSS 结合使用

amazon-web-services - AWS Cognito Groups 和 AWS Api Gateway

amazon-web-services - 如何使 AWS APIGateway 缓存无效

caching - 不使用保护子句过滤 erlang ets 表

c# - 如何使用自定义路由缓存图像文件返回图像文件?

node.js - Cloudfront 缓存与 GraphQL?

amazon-web-services - Cloudfront 中可能的 X-Cache 值

amazon-web-services - 将 context.requestTimeEpoch 映射到 AWS API Gateway 映射模板中的自定义日期格式字符串