用番石榴进行缓存

2022-09-02 21:15:25

哪些番石榴类适合线程安全缓存?我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧?我在某个地方看到了ConcurentLinkedHashMap,这是要走的路吗?它是否已经在最新版本中?很抱歉问...

更新

这个问题已经很老了,通过他的答案来查看可能是浪费时间。长期以来,有一个CacheBuilder是要走的路。


答案 1

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);
         }
       });

答案 2

听起来像你想要的,但你提到,所以我假设你已经熟悉那个类。MapMaker.makeComputingMapsoftKeys

你是对的 - 如果您动态编写键,它将不起作用,因为会导致地图使用而不是用于键比较。但是,只要重新创建逐出的条目没有副作用,您应该对 和 没问题。softKeyssoftKeys==equalssoftValuesexpiration