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

部署在AWS Amplify上的Next.js应用缓存问题排查

问题分析:RDS关闭时Next.js应用仍显示数据的缓存来源

可能的缓存来源及原因

1. AWS Amplify服务器端渲染缓存

Amplify Hosting默认会对Next.js的getServerSideProps输出做缓存优化,若请求未设置明确的缓存控制头,它会缓存服务器端渲染的页面内容。后续请求进来时,只要缓存未过期,就直接返回缓存页面,不会重新执行getServerSideProps调用API。这就导致RDS关闭、API超时期间,Amplify直接返回之前缓存的有效数据。

2. API网关或Lambda函数缓存

如果你的API网关或Lambda函数配置了缓存策略,即使RDS关闭,API网关可能返回之前缓存的响应结果,而非触发Lambda尝试连接RDS。这种情况下,getServerSideProps调用API时拿到的是旧缓存数据,页面自然会显示过期内容。

3. Next.js内部缓存(概率较低)

虽然getServerSideProps设计为每次请求都执行,但如果你的代码中给getServerSideProps返回了revalidate字段,或者自定义了Cache-Control头,可能会意外触发缓存。不过这种情况在纯getServerSideProps场景下很少见,可作为次要排查点。

验证与排查步骤

  • 检查Amplify缓存配置:进入Amplify控制台,在App settings > Hosting > Rewrites and redirects或Performance标签下查看缓存规则,确认是否存在针对页面的缓存策略。
  • 直接测试API:RDS关闭时,用curl或Postman直接调用你的API。若返回旧数据,说明缓存来自API网关/Lambda;若返回超时,则缓存来自Amplify或Next.js。
  • 强制禁用页面缓存:在getServerSideProps中添加以下代码,强制每次请求重新渲染:
    export async function getServerSideProps(context) {
      // 禁用缓存
      context.res.setHeader('Cache-Control', 'no-store, must-revalidate');
      
      // 原有的API调用逻辑
      // ...
      
      return { props: { /* 数据 */ } };
    }
    
    部署后观察RDS关闭时页面是否还会显示旧数据,以此验证缓存来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:15:41