具有过期密钥的基于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

回到顶部