Zeitbasierte Java-Karte/Cache mit ablaufenden Schlüsseln
Diese Frage sucht nach einer Java-Implementierung, die Einträge basierend auf einem konfigurierbaren Timeout automatisch abläuft. Die bevorzugte Lösung vermeidet schwache Referenzen, externe Konfigurationsdateien und manuelle Implementierung.
Antwort
Die Guava-Bibliothek bietet mit ihrer MapMaker-Klasse eine Lösung:
ConcurrentMap<Key, Graph> graphs = new MapMaker() .concurrencyLevel(4) .softKeys() .weakValues() .maximumSize(10000) .expiration(10, TimeUnit.MINUTES) .makeComputingMap( new Function<Key, Graph>() { public Graph apply(Key key) { return createExpensiveGraph(key); } });
Für Guava Version 10.0 und höher verwenden Sie CacheBuilder:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(10000) .expireAfterWrite(10, TimeUnit.MINUTES) .build( new CacheLoader<Key, Graph>() { public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); } });
Diese Implementierung sorgt für einen automatischen Schlüsselablauf und stellt sicher, dass Einträge nach einem bestimmten Zeitraum entfernt werden.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine zeitbasierte ablaufende Karte/einen Cache in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!