用途:为自托管、多实例运行的 Next.js 15/16 提供 Redis 缓存,统一 ISR(Pages Router/fetch 缓存)与 'use cache'(cacheComponents: true)两条缓存路径,让多实例共享缓存并协同失效。不用于 Vercel 托管应用(Vercel 自带托管缓存)。
版本与安装:要求 next >=15.0.0 <17。安装 npm i @leejpsd/nextjs-cache-handler,并选一个客户端:redis(node-redis v5)或 ioredis(Cluster/Sentinel 必需)。安装版本须 >=0.3.3,更早的 0.3.x 软失效路径不完整。Next 15 用 cacheHandler;Next >=16.1.5 两者都用。
接线:需在项目根建两个 CommonJS 包装文件(cache-components.cjs、cache-incremental.cjs),分别用 createCacheComponentsHandler 与 createIncrementalCacheHandler 创建,再在 next.config 中设置 cacheHandler、cacheHandlers、cacheComponents 及 cacheMaxMemorySize: 0。环境变量 REDIS_URL(rediss:// 启用 TLS)与 DEPLOYMENT_VERSION(按部署命名空间)。Docker 中 DEPLOYMENT_VERSION 必须在 runner 阶段设置。
失效语义:revalidateTag(tag[, "max"]) 为软失效/SWR,先返回陈旧内容、后台重渲染,各实例约 1-2 秒收敛;updateTag(tag) 为硬失效,立即删除条目;revalidatePath 走软路径并叠加硬丢弃。显式 cacheTag() 标签由处理器检查。
主要选项:compression、memoryMaxEntries、fallback、singleFlight、abortTimeoutMs、hashTag(Redis Cluster 必开)、onMetric、tagPubSub(0.4+)。内置重连退避、内存降级与单操作超时,Redis 故障时降级为内存服务。
常用命令:npx nextjs-cache-handler init --yes、doctor、seed(部署后预热)。调试键布局如 next-cache:entry:<deploy>:<key>、next-incremental:entry:<deploy>:<path>。生产检查项包括 output: "standalone"、Redis maxmemory-policy、健康检查端点与 OTel 指标。该资料未提供价格或收费信息。