2017-01-13 5 views
1

이 질문은 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(); 

답변

1

get 또는 getUnchecked를 호출하면 절대 null이 반환되지 않습니다.

성능면에서 - 특정 키를 가져 오는 데 걸리는 시간과 새로 계산해야하는지 여부 - 그리고 실제로 얻은 실제 값이 오래된 정보를 반영하는지 여부를 "만료"할 수 있습니다 .

+0

루이 감사합니다. 감사합니다. :) –