用途:在 Next.js 16+ 应用中实现显式缓存,或从旧版缓存 API(unstable_cache、fetch 的 revalidate、路由级 revalidate 等)迁移到新模型。核心前提是 Next.js 16 的缓存为显式、可选加入(opt-in),未加 'use cache' 的内容不会被缓存。
主要能力:1)'use cache' 指令,可加在文件顶部缓存整页,或加在异步函数(如数据层函数)与 Server Component 上实现函数级/组件级缓存。2)cacheLife(),提供 seconds、minutes、hours、days、weeks、max 等内置配置,也可在 next.config.ts 自定义 stale/revalidate/expire 三段参数,分别控制陈旧期、后台再验证与最长存活。3)cacheTag() 为缓存数据打标签,配合 Server Action 或 Route Handler 中的 revalidateTag() 做定向或层级失效,如 'products'、'product-123'。4)在 next.config.ts 开启 cacheComponents: true,可对单个 Server Component 做缓存,页面重渲染时该组件直接走缓存。5)与 Partial Prerendering(PPR)结合,配置 ppr: true 后,静态外壳与动态空洞共存,缓存组件在静态外壳中从缓存输出,动态部分通过 Suspense 在请求时渲染。
使用方式:在需要缓存的函数或文件顶部书写 'use cache',随后调用 cacheLife() 选择或使用自定义配置,并用 cacheTag() 打标签;数据变更时在 Server Action 或 Route Handler 中调用 revalidateTag() 精确清除。迁移示例:旧写法用 unstable_cache 包裹函数并传 revalidate、tags,新写法改为在函数内写 'use cache'、cacheLife('hours')、cacheTag(...);fetch 的 next.revalidate 与 tags 同样迁移为 cacheLife() 与 cacheTag()。代码内容保持原文,不在此展开。
适用场景:静态页、博客文章、商品列表、用户仪表盘、实时流等不同更新频率的内容,可按内置或自定义配置选择缓存策略;公共且与用户无关的数据适合缓存,需鉴权的用户数据保持动态。
限制与注意事项:不可对渲染用户特定或鉴权相关数据的组件使用 'use cache',因为缓存键不含会话上下文,不同用户可能拿到彼此的缓存内容;所有读取可变数据的缓存函数都应打 cacheTag(),否则只能等过期;切勿对执行写操作的 Server Action 使用 'use cache',否则返回缓存结果而不执行写入;每次写操作后需调用 revalidateTag(),避免陈旧数据在完整缓存生命周期内持续;标签命名应细粒度且分层,避免使用过宽的标签导致整体缓存被清。是否需要额外配置项、版本兼容范围及官方细则暂未在资料中提供。