gpt4 book ai didi

Java 基于时间的映射/缓存,带有过期键

转载 作者:行者123 更新时间:2023-12-01 16:49:12 24 4
gpt4 key购买 nike

你们中有人知道 Java Map 或类似的标准数据存储可以在给定的超时后自动清除条目吗?这意味着老化,即旧的过期条目自动“老化”。

我知道自己实现该功能的方法,并且过去已经做过几次,所以我不是在寻求这方面的建议,而是寻求一个好的引用实现的指针。

WeakReference基于解决方案,如 WeakHashMap不是一个选项,因为我的键可能是非驻留字符串,并且我想要一个不依赖于垃圾收集器的可配置超时。

Ehcache也是我不想依赖的一个选项,因为它需要外部配置文件。我正在寻找仅代码解决方案。

最佳答案

是的。 Google Collection ,或 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 基于时间的映射/缓存,带有过期键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61727037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com