用番石榴缓存

maa*_*nus 18 java caching guava

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

更新

这个问题很老了,通过他的回答可能是浪费时间.很长一段时间,CacheBuilder这是一条路.

KAR*_*ván 20

10.0版的新Guava库引入了Cache专门用于缓存的界面.

它附带CacheBuilder,类似于MapMaker所有缓存方法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);
         }
       });
Run Code Online (Sandbox Code Playgroud)


fin*_*nnw 5

听起来像你想要MapMaker.makeComputingMap,但你提到softKeys所以我假设你已经熟悉那个班级.

你是对的softKeys- 如果你动态地组合键,它将无法工作,因为softKeys使用地图==而不是equals键进行比较.但是你应该没事,softValues并且expiration,只要重新创建一个被驱逐的条目没有副作用.

  • 在本周即将发布的Guava版本8中,请注意expiration()已分为两种形式:expireAfterWrite()和expireAfterAccess().还有一个maximumSize()选项. (7认同)