Guava CacheBuilder 未按预期工作
Guava CacheBuilder not working as expected
嗨,我是 google guava collections 的新手,所以我需要 collection,它会过期一段时间 period.So 我写了以下代码,但它没有删除过期后的数据 time.Can 谁能告诉我代码有什么问题。
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());
我需要添加 objects 到映射,并且在过期时间段后它将从 map.But 上面的代码中删除,线程在映射中包含 object 前后。
expireAfterAccess
的 javadoc 指出:
Expired entries may be counted in Cache.size()
, but will never be visible to read or write operations. Expired entries are cleaned up as part of the routine maintenance described in the class javadoc.
这意味着即使使用 .size()
对条目进行计数,它们在任何其他操作中也不可见。
这些无效条目将被自动删除。根据 javadoc,这发生在以下情况:
- 入口是用get访问的:
地图看到入口已经过时,直接移除
- 偶尔访问缓存:
有时访问.get()
方法会触发内部清理,javadoc没有为此定义任何周期.
- 手动调用
Cache.cleanUp()
:
这会直接触发清理例程并删除所有过时的条目。
更多信息似乎在 Github Wiki of the cache class 中解释。
如果您想在条目被删除时收到通知,您可以使用RemovalListener. You can set this listener on the cachebuilder using .removalListener(...)
。
嗨,我是 google guava collections 的新手,所以我需要 collection,它会过期一段时间 period.So 我写了以下代码,但它没有删除过期后的数据 time.Can 谁能告诉我代码有什么问题。
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());
我需要添加 objects 到映射,并且在过期时间段后它将从 map.But 上面的代码中删除,线程在映射中包含 object 前后。
expireAfterAccess
的 javadoc 指出:
Expired entries may be counted in
Cache.size()
, but will never be visible to read or write operations. Expired entries are cleaned up as part of the routine maintenance described in the class javadoc.
这意味着即使使用 .size()
对条目进行计数,它们在任何其他操作中也不可见。
这些无效条目将被自动删除。根据 javadoc,这发生在以下情况:
- 入口是用get访问的:
地图看到入口已经过时,直接移除 - 偶尔访问缓存:
有时访问.get()
方法会触发内部清理,javadoc没有为此定义任何周期. - 手动调用
Cache.cleanUp()
:
这会直接触发清理例程并删除所有过时的条目。
更多信息似乎在 Github Wiki of the cache class 中解释。
如果您想在条目被删除时收到通知,您可以使用RemovalListener. You can set this listener on the cachebuilder using .removalListener(...)
。