这可以通过使用受害者高速缓存来捕获最近过期的条目并在数据库关闭时从负载中恢复来完成。受害者缓存将需要其自身的边界,例如更长的到期阈值。
Cache<K,V> victimCache = Caffeine.newBuilder()
.expireAfterWrite(10,TimeUnit.MINUTE)
.build();
LoadingCache<K,V> mainCache = Caffeine.newBuilder()
.expireAfterWrite(1,TimeUnit.MINUTE)
.writer(new CacheWriter<K,V>() {
public void write(K key,V value) { /* ignored */ }
public void delete(K key,V value,RemovalCause cause) {
if (cause == RemovalCause.EXPIRED) {
victimCache.put(key,value);
}
})
.build(key -> {
try {
// load from db
} catch (DatabaseAccessException e) {
return victimCache.asMap().remove(key);
}
});
如果存在条目,这将允许加载失败以从受害者缓存中恢复该条目。
本文链接:https://www.f2er.com/2374455.html