이 질문은 Guava 캐시가 올바른 방식으로 사용되는지 확인하기 위해 관찰 된 동작을 확인하는 것입니다.Guava 캐시 expireAfterWrite는 getIfPresent와 함께 사용할 수 있습니까?
내가 가지고있는 설정이 구아바 캐시 (아래 코드 참조)와 빌더없이 - 구아바 documentation 상태 등 : 값을 정리를 수행하고 퇴거하지 않는 CacheBuilder로 구축
캐시 "자동"또는 값이 만료 된 직후, 또는 의 항목.
getIfPresent()
방법이 사용되는 경우 그 만료에만 키 다음 쿼리 null
의 값이 일정 시간 후에 반환되는 경우> 유효 구간 키/값을 캐시에 기록 될 때 통과 즉 관찰 나타난다. get()
또는 getUnchecked()
을 사용하여 CacheLoader로 빌드 된 캐시의 경우 실행될 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();
루이 감사합니다. 감사합니다. :) –