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キャッシュ実装を使用していますか? – marthursson
このパラメータは何ですか? – Kayaman