I'm using Caffeine cache to store data received from an external system.
LoadingCache<String, String> clientCache = Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build(id -> {
System.out.println("Generating new value for " + id);
if (id.equalsIgnoreCase("1")) {
return null;
}
return new Date().toString();
});
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("1"));
System.out.println(clientCache.get("2"));
System.out.println(clientCache.get("3"));
This resulted,
Generating new value for 1
null
Generating new value for 1
null
Generating new value for 2
Wed May 20 17:11:01 IST 2020
Generating new value for 3
Wed May 20 17:11:01 IST 2020
Wed May 20 17:11:01 IST 2020
Caffeine is not saving null values in cache. How to store nulls in Caffeine?
null
meaning "I tried but got null" and "I didn't try yet". Maybe you could useOptional
for the values instead, i.e. instead of returningnull
you returnOptional.empty()
. Of course you'd then have to deal with the optionals then but that might improve your code or at least would be easy to adapt to the current logic with aorElse(null)
. – MiksenMap.computeIfAbsent
a null return value indicates that it cannot be stored, so a subsequent call will try to recompute. – Meissner