用番石榴进行缓存
哪些番石榴类适合线程安全缓存?我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧?我在某个地方看到了ConcurentLinkedHashMap,这是要走的路吗?它是否已经在最新版本中?很抱歉问...
更新
这个问题已经很老了,通过他的答案来查看可能是浪费时间。长期以来,有一个CacheBuilder
是要走的路。
哪些番石榴类适合线程安全缓存?我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧?我在某个地方看到了ConcurentLinkedHashMap,这是要走的路吗?它是否已经在最新版本中?很抱歉问...
这个问题已经很老了,通过他的答案来查看可能是浪费时间。长期以来,有一个CacheBuilder
是要走的路。
10.0版本的新番石榴库引入了专为缓存而设计的缓存
接口。
它附带了CacheBuilder
,它类似于MapMaker
,所有缓存方法都将在版本11中删除。MapMaker
文档中的示例:
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);
}
});
听起来像你想要的,但你提到,所以我假设你已经熟悉那个类。MapMaker.makeComputingMap
softKeys
你是对的 - 如果您动态编写键,它将不起作用,因为会导致地图使用而不是用于键比较。但是,只要重新创建逐出的条目没有副作用,您应该对 和 没问题。softKeys
softKeys
==
equals
softValues
expiration