Java 基於時間的Map/帶有過期鍵的快取
問:是否有內建的Java Map 或類似的資料結構可以自動在指定的時間間隔後刪除條目?
答:是的,Google Collections(現在稱為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開始,上述MapMaker 方法已被棄用,取而代之的是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); } });
此 CacheBuilder 提供了額外的靈活性和更現代的 API 來管理快取行為。
以上是如何在 Java 中建立基於時間的過期映射?的詳細內容。更多資訊請關注PHP中文網其他相關文章!