# A rollback does not roll the cache back cacheManager : org.springframework.cache.concurrent.ConcurrentMapCacheManager nameOf(1) -> Alice An outer @Transactional method calls the @CachePut update, which succeeds, and then fails on the next step. The transaction rolls back. what the cache serves : Alice Cooper what the database has : Alice The cache is now holding a name that no transaction ever committed. Nothing will correct it until the entry expires or something evicts it. --- the same shape with @CacheEvict --- nameOf(2) -> Bob after the rollback, nameOf(2) -> Bob database loads: 2 <- the entry was evicted, so this one reloaded An eviction that fires too early is self-healing: the next read goes to the database and re-populates correctly. A @CachePut that fires too early is not.