具有过期密钥的基于Java时间的地图/缓存
你是否知道在给定超时后会自动清除条目的Java Map或类似标准数据存储?这意味着老化,旧的过期条目会自动“老化”。
最好在可通过Maven访问的开源库中?
我知道自己实现该功能的方法,并且过去已经做过几次,所以我并不是在这方面寻求建议,而是寻求指向一个好的参考实现的指针。
像WeakHashMap这样的基于WeakReference的解决方案不是一个选择,因为我的密钥很可能是非interintern字符串,并且我希望可配置的超时时间不依赖于垃圾回收器。
我也不想依靠Ehcache,因为它需要外部配置文件。我正在寻找仅代码解决方案。
回答:
是。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(2011年9月28日发布)开始,许多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);
}
});
以上是 具有过期密钥的基于Java时间的地图/缓存 的全部内容, 来源链接: utcz.com/qa/409666.html