The layered caching system that decides how fresh (or stale) your data actually is.
Next.js caches at several distinct layers that are easy to conflate. Request Memoization deduplicates identical fetch calls within a single render pass. The Data Cache persists fetch results across requests and even across deployments, until it's invalidated or a revalidation interval passes. The Full Route Cache stores the rendered HTML and RSC payload for statically rendered routes. And the Router Cache stores route segments on the client for fast back-and-forward navigation.
Each layer has its own invalidation model, which is exactly why 'my data isn't updating' can have several different fixes depending on which layer is actually serving the stale value. Per-fetch cache and next.revalidate options control the Data Cache directly, while revalidatePath and revalidateTag invalidate specific cached data on demand — typically called from a Server Action right after a mutation, so the next request reflects the change instead of serving a cached one.
What you'll walk away knowing