用番石榴缓存

什么Guava类适合线程安全的缓存? 我使用一个组合键,它是动态构造的,所以softKeys()没有意义,对吧? 我看到ConcurentLinkedHashMap的某个地方,是不是要走的路? 它已经在最近发布了吗? 对不起请问混乱的方式……

更新

这个问题很老了,通过他的回答可能是浪费时间。 很久以来,就有了一个CacheBuilder

听起来你想要MapMaker.makeComputingMap ,但是你提到softKeys所以我假设你已经熟悉了这个类。

你对softKeys是正确的 – 如果你在运行中组合键它将无法工作,因为softKeys使地图使用==而不是equals键进行比较。 但是,只要重新创建被驱逐的条目没有副作用,你就可以使用softValuesexpiration

版本10.0的新Guava库引入了Cache接口,专门用于缓存。

它附带了CacheBuilder ,类似于MapMakerMapMaker所有缓存方法都将在第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把它归入其中。