gpt4 book ai didi

java - 使用 java ConcurrentHashMap 实现缓存

转载 作者:太空狗 更新时间:2023-10-29 22:49:16 28 4
gpt4 key购买 nike

我想在 Web Java 应用程序中实现重量级对象的简单缓存。但我不知道如何正确地做到这一点。

我是否遗漏了什么或 ConcurrentHashMap 方法(putIfAbsent,...)不够用并且需要额外的同步?

是否有更好的简单 API(在内存存储中,无需外部配置)来执行此操作?

P.

最佳答案

根据 Ken 的回答,如果创建一个后来被丢弃的重量级对象是 Not Acceptable (出于某种原因,您想保证为每个键只创建一个对象),那么您可以通过... . 实际上,不要。不要自己做。使用 google-collections (现在 guava ) MapMaker class :

Map<KeyType, HeavyData> cache = new MapMaker<KeyType, HeavyData>()
.makeComputingMap(new Function<KeyType, HeavyData>() {
public HeavyData apply(KeyType key) {
return new HeavyData(key); // Guaranteed to be called ONCE for each key
}
});

然后一个简单的 cache.get(key) 就可以工作 并且让您完全不必担心并发和同步的棘手方面。

注意,如果你想添加一些更高级的功能,比如过期,这只是

Map<....> cache = new MapMaker<....>()
.expiration(30, TimeUnit.MINUTES)
.makeComputingMap(.....)

如果需要,您还可以轻松地为键或数据使用软值或弱值(有关详细信息,请参阅 Javadoc)

关于java - 使用 java ConcurrentHashMap 实现缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070407/

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