2013-09-01 27 views
2

这是我的HashMap。使用超时创建HashMap将会使用Guava缓存工作吗?

Map<String,MyObject> mymap=new HashMap<String,MyObject>(); 

我要执行像正常运作得到,把我想多一个操作即地图会自动删除当对象更不被访问超过一定时间

它是一个对象类似谷歌番石榴?如果是的话,请举个例子。而据我读的番石榴doenot支持。

如果不是,有没有办法做到这一点?

编辑:每当我从用户得到一个GET请求,我创建myobject并将其存储在map.And如果我从用户有另一个请求具有相同的密钥我从用户获取存储的对象,做一些操作并再次将其存回。

如果该键是一个新的密钥,然后在地图应该返回一个空

回答

4

请参见第番石榴的CacheBuilder的javadoc(它包含的例子):

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

而且这样的:https://code.google.com/p/guava-libraries/wiki/CachesExplained

UPDATE:没有必要使用缓存加载器,或者有一个加载方法。此测试用例通过:

@Test 
public void testManualInsertion() { 

    Cache<String, String> cache = CacheBuilder.newBuilder() 
      .maximumSize(1000) 
      .expireAfterWrite(10, TimeUnit.MINUTES) 
      .removalListener(new MyRemovalListener()) 
      .concurrencyLevel(4) 
      .recordStats() 
      .build(); 


    cache.put("someKey", "someValue"); 

    assertEquals("someValue", cache.getIfPresent("someKey")); 

} 
+1

:请看编辑。番石榴是否支持'放'。我无法在任何地方找到它。而且,我的load方法是否返回null? – user2736993

+1

已更新的回答。 – Keith

+0

我实现了上面的功能,但是我找到了一个java类没有找到的错误com.google.common.cache.Cache。你知道它为什么会这样吗?它的编译非常好。运行时出现故障 – user2736993

相关问题