2

我指的是以下内容:

https://code.google.com/p/guava-libraries/wiki/CachesExplained

我有一个当前定义如下的哈希映射:

Map<String, String> barcodeMap = Maps.newHashMap(); //Declaring hashmap
while ((nextLine = reader.readNext()) != null) // populating hashmap
 {
  barcodeMap.put(nextLine[0], nextLine[1]);
 }

我希望我的地图使用缓存实现,一次只存储两个小时,我尝试阅读我放置的链接中的示例,但我不明白如何更改我当前的地图。我明白我必须填充地图然后使用驱逐,但我不明白我将如何更改我当前的代码。

4

1 回答 1

7

这很简单,尽管我可以看到混淆,因为他们给出的所有示例都假设您正在使用 CacheLoader 来填充缓存,如果您之前使用的是 Map,那么您就不会这样做。

所以,给出的例子是:

 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .removalListener(MY_LISTENER)
   .build(
       new CacheLoader<Key, Graph>() {
         public Graph load(Key key) throws AnyException {
           return createExpensiveGraph(key);
         }
       });

您是直接插入地图,而不是使用加载器,因此请移除加载部分:

 Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .removalListener(MY_LISTENER)
   .build();

删除项目时不需要通知?

 Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .build();

不想要一个固定大小的缓存,并且只想按时限制它?

 Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .expireAfterWrite(10, TimeUnit.MINUTES)
   .build();

你说你想要 2 小时,而你的版本是 String,String,所以...

 Cache<String, String> graphs = CacheBuilder.newBuilder()
   .expireAfterWrite(2, TimeUnit.HOURS)
   .build();
于 2013-09-25T14:54:54.407 回答