You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS API Gateway 如何实现指定租户下所有用户的缓存失效

指定租户维度的站点资源缓存作废方案

以下两个方案均满足仅作废指定租户缓存、无需全量清理所有租户数据的要求:

方案1:缓存标签(最推荐)

绝大多数CDN、服务端缓存中间件(Varnish、Nginx缓存、Redis缓存等)都原生支持缓存标签能力,适配性最高:

  • 处理/tenant/:tenantId/users/:userId/sites/:siteId接口响应时,给返回头添加缓存标签字段(通用头名为Cache-Tag,不同服务可能有自定义命名),固定携带tenant:{tenantId}格式的标签,例如租户ID为456时标签值为tenant:456。你也可以按需追加site:{siteId}、group:relate等更细粒度的标签适配其他清理场景。
  • 缓存层会自动将每个缓存条目和绑定的标签关联存储,当指定租户下的站点资源、group资源发生变更时,你只需要向缓存层发送一次清理指令:清除所有携带tenant:{对应租户ID}标签的缓存条目即可,全程不会影响其他租户的缓存数据。

方案2:租户级缓存版本戳(无缓存标签能力时用)

如果你的缓存服务不支持标签能力,可以用版本戳的方式间接实现定向作废:

  • 在持久化存储(数据库、Redis)中为每个租户维护一个独立的缓存版本号字段,例如tenant_cache_version:789 = v1,初始值可随意设置。
  • 当对应租户下的站点、group资源更新时,直接将该租户的缓存版本号+1即可,不需要做任何缓存删除操作。
  • 服务端生成缓存key时,固定将租户版本号加入key规则,例如缓存key格式为site_data:{version}:{tenantId}:{userId}:{siteId}。一旦租户版本号变更,所有旧版本的缓存key将无法被命中,旧缓存条目到期后会自动被缓存层清理,等效于定向作废该租户下的所有相关缓存。

Cache-Control 头的适配方法

  • 接口的响应头可以设置为 Cache-Control: public, max-age=你接受的最大缓存秒数, must-revalidate,must-revalidate 配置会保证缓存到期后客户端必须回源校验,不会直接使用过期缓存。
  • 如果需要兼顾体验和实时性,可以追加stale-while-revalidate=60配置,意思是缓存过期后的60秒内可以先给用户返回旧缓存,后台异步回源拉取最新数据,不会阻塞用户请求。
  • 如果你需要强制客户端每次都校验缓存有效性,可以将max-age设为0,配置为Cache-Control: public, no-cache,注意no-cache不是不缓存,是每次使用缓存前都要回源校验和服务端的最新版本是否一致,能大幅降低回源的传输体积。

内容的提问来源于stack exchange,提问作者systemdebt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:48:03