带有过期键的基于时间的 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中文网其他相关文章!