帶有過期鍵的基於時間的Java 映射/緩存
此問題尋求一種Java 實現,該實現可根據可配置的超時自動使條目過期。首選解決方案避免弱引用、外部設定檔和手動實現。
答案
Guava 庫透過其 MapMaker 類別提供了一個解決方案:
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); } });
對於 Guava 10.0 及更高版本,請使用及更高版本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); } });
此實作提供自動金鑰過期功能,確保條目在指定時間段後被刪除。
以上是如何在 Java 中實現基於時間的過期映射/快取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!