2012-11-10 17 views
1

我正在使用帶驅逐策略的番石榴LoadingCache set expireAfterWrite()。我還使用無效的訪問條目:僅適用於自動驅逐事件的RemovalListener

v = cache.getIfPresent(k); 
if(v != null) { 
    cache.invalidate(k); 
} 

有沒有辦法來添加,只有當項目獲得自動驅逐寫超時被擊中後,都會激發一個RemovalListener?從文檔看來,每次刪除條目時都會調用RemovalListener。

回答

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

完美!我喜歡番石榴緩存! – amo

+1

其實你可以直接在通知上調用'wasEvicted()'! – fry

0

這不是一個完美的解決方案,主要是如果你正在尋找性能。 如果您有辦法只接收被驅逐的條目,應該更好地使用MUTCH。 恕我直言

相關問題