gpt4 book ai didi

java - Guava Cache expireAfterWrite 仅适用于使用 getIfPresent 吗?

转载 作者:行者123 更新时间:2023-11-30 02:41:14 25 4
gpt4 key购买 nike

这个问题是为了验证观察到的行为,以确保 Guava Cache 以正确的方式使用。

我设置了两个 Guava 缓存(参见下面的代码):有和没有构建器 - 如 Guava documentation状态:

Caches built with CacheBuilder do not perform cleanup and evict values "automatically," or instantly after a value expires, or anything of the sort.

看来只有在 getIfPresent() 时才会观察到过期。使用方法,即当查询某个键时,经过一段时间>到期间隔后,将返回 null 值,并将键/值写入缓存。如果使用 CacheLoader 构建缓存,则使用 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();

最佳答案

确实,如果您调用 get 或 getUnchecked,您将永远不会得到 null。

可以从性能方面“观察”过期情况 - 获取特定 key 需要多长时间以及是否必须重新计算 - 以及您获得的实际值是否反射(reflect)了可能过时的信息。

关于java - Guava Cache expireAfterWrite 仅适用于使用 getIfPresent 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com