# A cached null is a real entry called NullValue searchCachingNulls("xyz") returns null, called twice -> 1 invocations cache "nulls": key xyz -> null [org.springframework.cache.support.NullValue] The abstraction stores org.springframework.cache.support.NullValue.INSTANCE so a hit on null is distinguishable from a miss. This is usually what you want - it is the cheap defence against a hot lookup for a row that is not there - and occasionally exactly what you do not want. --- unless = "#result == null" --- searchNullable("xyz") twice -> 2 invocations <- the null was never stored cache "terms": (empty)