Code Reference

Caching

Next.js · Reference cheat sheet

Caching

Next.js · Reference cheat sheet


📋 Overview

App Router caching spans the Request Memoization, Data Cache, Full Route Cache, and Router Cache. Defaults favor static where possible; opt into dynamic when data must be fresh.

🔧 Core concepts

CacheWhat it stores
Request MemoizationDedupes identical fetch in one render pass
Data CachePersistent server fetch cache across requests
Full Route CachePre-rendered HTML/RSC payload at build
Router CacheClient-side cache of visited segments
ControlEffect
fetch(url, \{ cache: 'no-store' \})Skip Data Cache
fetch(url, \{ next: \{ revalidate: N \} \})ISR-style revalidate every N seconds
revalidatePath / revalidateTagOn-demand invalidation
export const dynamic = 'force-dynamic'Always dynamic route
export const revalidate = 60Segment revalidate window

💡 Examples

Time-based revalidation:

const res = await fetch("https://api.example.com/items", {
  next: { revalidate: 3600, tags: ["items"] },
});

On-demand revalidate (Server Action / Route Handler):

import { revalidateTag } from "next/cache";

export async function refreshItems() {
  revalidateTag("items");
}

Force dynamic:

export const dynamic = "force-dynamic";

⚠️ Pitfalls

  • Stale UI after mutations usually means missing revalidatePath/revalidateTag.
  • Caching behavior differs between local next dev and production builds.
  • Mixing no-store fetches inside otherwise static layouts can turn the whole route dynamic.

On this page