Reputation: 11
I'm using the CaffeineCache implementation and used refreshAfterWrite along with cacheLoader. This will return the stale value if key is present while it loads the new value in cache but what if I want it to return null when key is not present but also fetch the value asynchronously for subsequent requests.
private CaffeineCache buildCache(String cacheName, Ticker ticker, Long maxSize, Long ttl, TimeUnit ttlUnit,
CacheLoader<Object, Object> cacheLoader){
Caffeine<Object, Object> cacheBuilder = Caffeine.newBuilder();
// TTL
if (ttl != null && ttl > 0 && ttlUnit != null) {
if (cacheLoader != null) {
cacheBuilder.refreshAfterWrite(ttl, ttlUnit);
cacheBuilder.expireAfterWrite(180, TimeUnit.MINUTES);
} else {
cacheBuilder.expireAfterWrite(ttl, ttlUnit);
}
}
// Max size
if (maxSize != null && maxSize > 0){
cacheBuilder.maximumSize(maxSize);
}
// Ticker
cacheBuilder.ticker(ticker);
if (cacheLoader != null) {
return new CaffeineCache(cacheName, cacheBuilder.build(cacheLoader));
}
return new CaffeineCache(cacheName, cacheBuilder.build());
}
This is my cache config currently, refreshAfterWrite is much less than expireAfterWrite.
Upvotes: 0
Views: 565