사용자 도구

사이트 도구


java:guava:cachebuilder

Guava CacheBuilder

GuavaCacheTest.java에서 사용예를 볼 수 있다. 특히 Multiple Cache Loading 이 필요할 경우 getAll 살펴볼 것.

LoadingCache

  • LoadingCache 인스턴스는 객체 build시에 키에 해당하는 값을 로딩하는 로더를 지정해줘야한다. 권장.
LoadingCache<Key,Value> loadingCache = CacheBuilder.newBuilder()
  .some settings
  .build(new CacheLoader<Key, Value>() {
    @Override
    public Value load(Key cacheKey) throws Exception {
       ... blah blarh..
       return value;
    }
  });
 
  // 아래와 같이 lambda로 처리 가능하다.
  CacheLoader.from(this::someMethod)
  • CacheLoader 구현시에 loadAll(Iterable<? extends Key> keys) 를 함께 구현하면, LoadingCache.getAll()에 의해서 키값을 다중으로 가져오는 것에 대응할 수 있다. 이 경우 loadloadAll을 호출해서 처리하도록 한다.
  • loadAll은 Key에 대한 모든 값을 리턴해야한다. 그렇지 않으면 오류가 발생한다. null 상황 캐시가 필요하면 Optional을 사용한다.

com.google.common.cache.Cache

  • 그냥 Cache는 build시에 CacheLoader를 지정하지 않고, get할 때 값을 가져오는 로직을 넣을 수 있다.
  • 단, 객체 Type은 Cache로 받아야한다. LoadingCache 불가.
Cache<Key, Value> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .build(); // look Ma, no CacheLoader
...
try {
  // If the key wasn't in the "easy to compute" group, we need to
  // do things the hard way.
  cache.get(key, new Callable<Value>() {
    @Override
    public Value call() throws AnyException {
      return doThingsTheHardWay(key);
    }
  });
} catch (ExecutionException e) {
  throw new OtherException(e.getCause());
}
java/guava/cachebuilder.txt · 마지막으로 수정됨: 2019/06/04 16:34 저자 kwon37xi