发布于 2026-02-16, 更新于 2026-03-03
使用 unstable_cache + revalidateTag 组合实现 Next.js 服务端函数缓存,并了解 fetch 缓存和多个实例间共享缓存等。
https://nextjs.org/docs/app/api-reference/functions/unstable_cache
适合服务端数据读取,如直接读数据库或聚合多源数据的服务端函数,配合 tags 与 revalidate 实现自动失效与定时刷新。
典型结构:
return unstable_cache(
async () => getPublicPostList(input),
['public-post-list', String(input.page), String(input.count), String(version)],
{ revalidate: 300, tags: ['public-posts'] },
)();
关键点:
https://nextjs.org/docs/app/api-reference/functions/revalidateTag
当写入数据后主动失效缓存。
写入数据后触发,如:
还有一种常见的缓存用法是 fetch 级别缓存与刷新:
fetch 的 cache/next.revalidate 控制await fetch(url, { cache: 'force-cache' });
await fetch(url, { cache: 'no-store' });
await fetch(url, { next: { revalidate: 300, tags: ['posts'] } });
fetch 缓存失效:
import { revalidatePath } from 'next/cache';
revalidatePath('/posts');
默认的内存缓存是与每个 Next.js 进程隔离的。如果运行多个服务器或容器,每个实例都会有自己的缓存,不会与其他服务共享,重启时缓存会丢失。
可以使用 cacheHandlers 配置自定义缓存的存储实现,配置为使用远程缓存/配置到Redis中等,