我正在使用带有驱逐策略设置 expireAfterWrite() 的番石榴 LoadingCache。我还使用以下方法使访问条目无效:
v = cache.getIfPresent( k );
if( v != null ) {
cache.invalidate( k );
}
有没有办法添加一个仅在达到写入超时后条目被自动驱逐时才会触发的 RemovalListener?从文档中可以看出,每当删除条目时都会调用 RemovalListener。
是的,RemovalListener
任何时候删除任何条目时都会调用 a —— 但是RemovalListener
会收到一个RemovalNotification
对象,其中包括cause,您可以使用它来确定条目是如何被删除的。
CacheBuilder.newBuilder()
.removalListener(new RemovalListener<Foo, Bar>() {
public void onRemoval(RemovalNotification<Foo, Bar> notification) {
if (notification.getCause() == RemovalCause.EXPIRED) {
// we only care about these removals
}
}
})
.build();
如果您正在寻找性能,这不是一个完美的解决方案。如果你有办法只接收被驱逐的条目,应该会更好。恕我直言