사용자 도구

사이트 도구


java:guava:cachebuilder

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
java:guava:cachebuilder [2012/12/17 02:00]
kwon37xi 새로 만듦
java:guava:cachebuilder [2019/06/04 16:34] (현재)
kwon37xi [LoadingCache]
줄 1: 줄 1:
 ====== Guava CacheBuilder ====== ====== Guava CacheBuilder ======
   * 메모리를 이용한 캐시 시스템을 간단히 구현할 수 있다.   * 메모리를 이용한 캐시 시스템을 간단히 구현할 수 있다.
 +  * Java 8 에서는 [[java:caffeine|Caffeine - java cache]] 참고
 +  * [[http://code.google.com/p/guava-libraries/wiki/CachesExplained|CacheExplained]]
   * [[http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html|CacheBuilder]]   * [[http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html|CacheBuilder]]
-  * Cache에서 값을 꺼낼 때 캐시에 값이 존재하는지를 저 검사하고 싶다면 Cache.asMap().get("key")로 값이 null인지 먼저 검사하면 된다.+  * Cache에서 값을 꺼낼 때 캐시에 값이 존재하는지를 저 검사하고 싶다면 ''Cache.asMap().get("key")''로 값이 null인지 먼저 검사하면 된다. 
 +  * [[http://www.javacodegeeks.com/2012/11/google-guava-cache.html|Google Guava Cache]] 
 +  * [[http://www.baeldung.com/guava-cache|Guava Cache]] 
 +  * ''null'' 값 자체를 리턴할 필요가 있다면 [[https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html|Java 8 Optional]] 혹은 [[java:guava:optional|Guava Optional]]을 사용한다. 
 +  * [[java:guava:supplier|Guava Supplier]] 단일 값 캐싱(Key가 없는) 
 + 
 + 
 +[[https://github.com/kwon37xi/research-java8/blob/master/java-8-others/src/test/java/guava/cache/GuavaCacheTest.java|GuavaCacheTest.java]]에서 사용예를 볼 수 있다. 특히 Multiple Cache Loading 이 필요할 경우 ''getAll'' 살펴볼 것. 
 +===== LoadingCache ===== 
 +  * LoadingCache 인스턴스는 객체 build시에 키에 해당하는 값을 로딩하는 로더를 지정해줘야한다. 권장. 
 +<code java> 
 +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) 
 +</code> 
 +  * ''CacheLoader'' 구현시에 ''loadAll(Iterable<? extends Key> keys)'' 를 함께 구현하면, ''LoadingCache.getAll()''에 의해서 키값을 다중으로 가져오는 것에 대응할 수 있다. 이 경우 ''load''는 ''loadAll''을 호출해서 처리하도록 한다. 
 +  * ''loadAll''은 Key에 대한 모든 값을 리턴해야한다. 그렇지 않으면 오류가 발생한다. null 상황 캐시가 필요하면 ''Optional''을 사용한다. 
 + 
 +===== com.google.common.cache.Cache ===== 
 +  * 그냥 Cache는 build시에 CacheLoader를 지정하지 않고, get할 때 값을 가져오는 로직을 넣을 수 있다. 
 +  * 단, 객체 Type은 ''Cache''로 받아야한다. ''LoadingCache'' 불가. 
 +<code java> 
 +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()); 
 +
 +</code>
java/guava/cachebuilder.1355677230.txt.gz · 마지막으로 수정됨: 2012/12/17 02:00 저자 kwon37xi