Start here. This is the direct spoken answer to practice first.
Why this question matters
Caching is one of the easiest places to make a Next.js app fast and also one of the easiest places to show the wrong user the wrong data.
I would classify data first. Public, rarely changing data can be cached and revalidated. User-specific or permission-sensitive data needs dynamic behavior or carefully scoped private caching. Frequently changing data may need short freshness windows, polling, server actions, or client-side refetching. The cache strategy should match the product promise: how fresh the user expects the data to be.