gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 10:40:58 24 4
gpt4 key购买 nike

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

最好在可通过 Maven 访问的开源库中?

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

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

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

最佳答案

是的。谷歌 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/3802370/

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