用番石榴缓存
什么Guava类适合线程安全的缓存? 我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧? 我看到ConcurentLinkedHashMap的某个地方,是不是要走的路? 它已经在最近发布了吗? 对不起请问混乱的方式……
更新
这个问题很老了,通过他的回答可能是浪费时间。 很久以来,就有了一个CacheBuilder
。
听起来你想要MapMaker.makeComputingMap
,但是你提到softKeys
所以我假设你已经熟悉了这个类。
你对softKeys
是正确的 – 如果你在运行中组合键它将无法工作,因为softKeys
使地图使用==
而不是equals
键进行比较。 但是,只要重新创建被驱逐的条目没有副作用,你就可以使用softValues
和expiration
。
版本10.0的新Guava库引入了Cache
接口,专门用于缓存。
它附带了CacheBuilder
,类似于MapMaker
, MapMaker
所有缓存方法都将在第11版中删除。
文档中的示例:
Cache graphs = CacheBuilder.newBuilder() .concurrencyLevel(4) .weakKeys() .maximumSize(10000) .expireAfterWrite(10, TimeUnit.MINUTES) .build( new CacheLoader() { public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); } });
MapMaker.maximumSize()
是ConcurrentLinkedHashMap
的长期替代品。 如果存在社群共识,CLHM仍然是改进后续移植算法的试验平台。 不过,我希望v2.0是将这些改进移植到MapMaker
后的最后一个版本。 该项目将根据需要保持活跃,因为它具有良好的用户群(例如Apache Cassandra)。 我非常高兴Guava把它归入其中。