Start here. This is the direct spoken answer to practice first.
Why this question matters
Cache keys are part of the security boundary in multi-tenant systems. A tiny missing scope can turn a performance feature into a data leak.
I would include every value that changes the response in the cache key. For multi-tenant data that usually means tenant id, resource id, filters, locale, response version, and sometimes user or role scope. A key like orders:{orderId} is risky if the same order id can exist in different tenants or if different users see different fields.