# TTL and size bounds are the provider's job, not the abstraction's

cacheManager : org.springframework.cache.caffeine.CaffeineCacheManager
configured   : expireAfterWrite=400ms, maximumSize=3, recordStats

two calls, same key, immediately -> 1 repository calls
one more call 600 ms later      -> 2 repository calls   <- the entry expired

--- size bound ---
five distinct keys written, maximumSize = 3
estimated size after eviction settles : 3
stats                                 : hits=1 misses=5 evictions=3

--- recordStats is not on by default ---
a Caffeine cache built without recordStats(), after 1 hit and 1 miss:
  CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadFailureCount=0, totalLoadTime=0, evictionCount=0, evictionWeight=0}

Every counter is zero. Micrometer's cache.gets and cache.evictions will
exist and report zero too, which looks exactly like a cache nobody uses.

The Spring cache abstraction has no TTL, no size limit and no eviction
policy of its own - it is an interface over whatever you plug in. On the
default simple provider, a ConcurrentHashMap, an entry stays until something
evicts it by hand or the process ends.
