嗨,我是谷歌番石榴收藏品的新手,所以我需要收集一段时间才会过期。所以我写了下面的代码,但是在过期时间之后它不会删除数据。任何人都可以告诉我代码的问题。< / p>
Cache<String, Object> cache = CacheBuilder.newBuilder()
.expireAfterAccess(2, TimeUnit.MILLISECONDS)
.build();
Object object = new Object();
cache.put(object.getId(), object);
System.out.println("size :" + cache.size());
Thread.sleep(50000);
System.out.println("After Size :" + cache.size());
我需要添加对象来映射,并且在过期时间之后它将从map中删除。但是在线程包含对象的地图之前和之后的上面的代码。
答案 0 :(得分:5)
expireAfterAccess
状态的javadoc:
过期的条目可能会计入
Cache.size()
,但读取或写入操作永远不会显示。过期的条目将作为javadoc类中描述的例行维护的一部分进行清理。
这意味着即使条目使用.size()
计算,它们也不会在任何其他操作中显示。
这些无效条目将自动删除。根据javadoc,这发生在以下情况:
.get()
方法会触发内部清理,javadoc没有为此定义任何时间段。Cache.cleanUp()
:更多信息似乎在Github Wiki of the cache class中解释。
如果您希望在删除条目时发出通知,则可以使用RemovalListener。您可以使用.removalListener(...)
在缓存生成器上设置此侦听器。