哪些Guava类适合线程安全缓存?我使用的是组合键,它是动态构造的,所以softKeys()没有任何意义,对吧?我在某个地方看到了ConcurentLinkedHashMap,这是你要走的路吗?它已经在最近的版本中了吗?很抱歉这么混乱的提问方式...
更新
这个问题很老了,翻看他的答案可能是浪费时间。很久以前就有了CacheBuilder,这就是我们要走的路。
发布于 2011-01-19 19:17:05
听起来您想要MapMaker.makeComputingMap,但是您提到了softKeys,所以我假设您已经熟悉那个类了。
您对softKeys的看法是正确的-如果您动态地组合键,它将无法工作,因为softKeys会导致映射使用==而不是equals进行键比较。但是,只要重新创建一个被驱逐的条目没有副作用,您应该可以使用softValues和expiration。
发布于 2011-11-09 18:10:16
10.0版的新Guava库引入了Cache接口,该接口专门为缓存而设计。
它附带了与MapMaker类似的CacheBuilder,MapMaker的所有缓存方法都将在版本11中删除。
文档中的示例:
Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});发布于 2011-01-20 15:12:13
MapMaker.maximumSize()是ConcurrentLinkedHashMap的长期替代品。如果有社区共识,CLHM仍然是改进算法的试验台,用于以后的移植。不过,我预计v2.0将是将这些改进移植到MapMaker之后的最后一个版本。该项目将根据需要继续存在,因为它拥有良好的用户基础(例如Apache Cassandra)。我很高兴Guava把它包含进来了。
https://stackoverflow.com/questions/4734018
复制相似问题