我猜你有一個LRU緩存的自定義實現。在這種情況下,我會建議一個監聽器的辦法處理這一問題,即創建一個CacheExpirationListener接口(如果你使用的是Java 8這不是絕對必要的,你也可以同樣使用用戶界面):
public interface CacheExpirationListener<V> {
void entryExpired(V value);
}
現在確保你的緩存實現保持其聽衆的跟蹤和之前實際刪除項目因此稱他們爲:
public class MyCacheImplementation<K, V> extends LinkedHashMap<K, V> {
private final List<CacheExpirationListener<V>> removalListeners = new ArrayList<>();
public void addRemovalListener(CacheExpirationListener<V> listener) {
removalListeners.add(listener)
}
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
if(size() > LRUConcurrentCache.this.cacheSize) {
removalListeners.forEach(CacheExpirationListener::entryExpired);
return true;
}
return false;
}
}
現在,創建一個持續提供的條目CacheExpirationListener實現中,註冊與緩存,和你可以了,好了。
但是請注意,還有很多其他需要處理的內容,例如,當你的應用程序關閉時會發生什麼?在這種情況下,所有的價值觀都需要堅持嗎?另外,如果持久性不起作用(數據庫關閉?),您顯然需要某種錯誤處理。在這種情況下應該發生什麼?也許應該保留條目或者 - 至少 - 你需要記錄出錯的地方。
您正在使用哪種LRU Cache實現? – marthursson
這是什麼參數? – Kayaman