Why not use Redis tags or cache versioning?
Redis tag-based invalidation requires maintaining a secondary index of which keys belong to which tenant. This adds complexity and introduces its own cache-consistency problems. The version-hash approach is stateless: the key itself encodes freshness. There is no secondary data structure to keep in sync, no background job to clean up stale tags, and no failure mode where the tag index disagrees with the cache contents.