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中文网其他相关文章!