Tenant-scoped cache keys
A single shared cache leaks across tenants if any code path forgets the tenant filter. The blast radius of one bad call is everyone.
Every cache key carries a tenant prefix as a structural rule, not a convention. Invalidation events scope to the tenant. Cross-tenant cache reads are inconvenient to write and obvious in review.