这个问题是为了验证观察到的行为,以确保以正确的方式使用 Guava Cache。
我已经设置了两个 Guava 缓存(参见下面的代码):有和没有构建器 - 正如 Guava文档所述:
使用 CacheBuilder 构建的缓存不会“自动”执行清理和逐出值,也不会在值过期后立即执行,或任何类似的操作。
似乎只有在getIfPresent()
使用方法时才会观察到过期,即当查询键时,null
在一段时间后返回值 > 过期间隔在键/值被写入缓存时传递。如果使用 CacheLoader 构建的 Cache 使用get()
或getUnchecked()
导致CacheLoader.load()
方法被执行,则不会观察到过期,即null
永远不会返回值。
这是正确的期望吗?
感谢您的耐心和帮助。
// excerpt from test code
private static final FakeTicker fakeTicker = new FakeTicker();
private static LoadingCache<Integer, String> usingCacheLoader = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.ticker(fakeTicker)
.build(new CacheLoader<Integer, String>() {
public String load(Integer keyName) throws Exception {
logger.info("Getting value for key: {}", keyName);
return getValue(keyName, "with_cache_loader");
}
});
private static Cache<Integer, String> withoutCacheLoader = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.ticker(fakeTicker)
.build();