TTL - данные устаревают по времени; при записи в БД можно сбрасывать ключ или обновлять значение. Invalidate on write: при обновлении сущности удалять/обновлять кеш. Версия в ключе: key = "user:123:v2" при смене схемы. Event-based: подписка на события изменения и инвалидация. В Go комбинируют TTL (защита от старых данных) и явную инвалидацию при записи.
func (s *Service) UpdateUser(ctx context.Context, u *User) error {
if err := s.repo.Update(ctx, u); err != nil { return err }
s.cache.Delete("user:" + u.ID)
return nil
}