</>
⌕
Senior #caching#data-cache#full-route-cache#router-cache#revalidate

Giải thích 4 tầng cache của Next.js App Router và cách revalidate

⚡ Trả lời nhanh

Request Memoization (dedupe fetch trong một lần render), Data Cache (kết quả fetch, bền qua request/deploy), Full Route Cache (HTML + RSC payload của route static, trên server) và Router Cache (RSC payload trong bộ nhớ browser). Revalidate bằng revalidateTag/revalidatePath hoặc next.revalidate.

TầngỞ đâuTồn tạiLàm mới bằng
Request Memoizationserver, Reacttrong một lần rendertự hết sau request
Data Cacheserverbền, qua request và deployrevalidateTag, revalidatePath, next.revalidate, cache: 'no-store'
Full Route Cacheserverbền đến khi revalidate hoặc redeployrevalidate Data Cache liên quan
Router Cacheclient (memory)theo phiên/thời gianrouter.refresh(), Server Action gọi revalidate
// Gắn tag + TTL cho Data Cache
const res = await fetch("https://api.x.com/posts", {
  next: { tags: ["posts"], revalidate: 3600 },
});

// Server Action sau khi mutate
import { revalidateTag, revalidatePath } from "next/cache";
revalidateTag("posts");   // làm mới mọi fetch gắn tag
revalidatePath("/posts"); // làm mới route (Data + Full Route Cache)

Khác biệt phiên bản (quan trọng):

  • Next 14: fetch mặc định force-cache; Router Cache giữ page dynamic 30s, static 5 phút.
  • Next 15: fetch mặc định không cache (như no-store); Router Cache staleTime của page segment là 0 (layout/loading vẫn dùng lại khi back/forward); GET Route Handler không cache mặc định. Tùy chọn có thể bật lại qua experimental.staleTimes.
  • Request Memoization chỉ áp dụng cho GET fetch; truy vấn DB bọc bằng cache() của React, hoặc unstable_cache để lưu vào Data Cache.
🃏 Ôn bằng flashcard