我正在使用带有逐出策略设置expireAfterWrite()的番石榴LoadingCache。我还使用以下方式使访问条目无效:
v = cache.getIfPresent( k );
if( v != null ) {
cache.invalidate( k );
}
有没有办法添加一个只有在命中写入超时后条目被自动驱逐才会被触发的RemovalListener?从文档中可以看出,只要删除了一个条目,就会调用RemovalListener。
答案 0 :(得分:2)
是的,每当删除任何条目时都会调用RemovalListener
- 但RemovalListener
会收到一个RemovalNotification
对象,其中包含原因 ,您可以使用它来确定如何删除条目。
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();
答案 1 :(得分:0)
如果您正在寻找性能,这不是一个完美的解决方案。 如果您有办法只收到被驱逐的条目,那么MUTCH应该更好。 IMHO