문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:guava:cachebuilder [2013/10/09 19:02] kwon37xi |
java:guava:cachebuilder [2019/06/04 16:34] (현재) kwon37xi [LoadingCache] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Guava CacheBuilder ====== | ====== Guava CacheBuilder ====== | ||
* 메모리를 이용한 캐시 시스템을 간단히 구현할 수 있다. | * 메모리를 이용한 캐시 시스템을 간단히 구현할 수 있다. | ||
+ | * Java 8 에서는 [[java: | ||
+ | * [[http:// | ||
* [[http:// | * [[http:// | ||
* Cache에서 값을 꺼낼 때 캐시에 값이 존재하는지를 먼저 검사하고 싶다면 '' | * Cache에서 값을 꺼낼 때 캐시에 값이 존재하는지를 먼저 검사하고 싶다면 '' | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | * '' | ||
+ | * [[java: | ||
+ | |||
+ | |||
+ | [[https:// | ||
+ | ===== LoadingCache ===== | ||
+ | * LoadingCache 인스턴스는 객체 build시에 키에 해당하는 값을 로딩하는 로더를 지정해줘야한다. 권장. | ||
+ | <code java> | ||
+ | LoadingCache< | ||
+ | .some settings | ||
+ | .build(new CacheLoader< | ||
+ | @Override | ||
+ | public Value load(Key cacheKey) throws Exception { | ||
+ | ... blah blarh.. | ||
+ | | ||
+ | } | ||
+ | }); | ||
+ | | ||
+ | // 아래와 같이 lambda로 처리 가능하다. | ||
+ | CacheLoader.from(this:: | ||
+ | </ | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== com.google.common.cache.Cache ===== | ||
+ | * 그냥 Cache는 build시에 CacheLoader를 지정하지 않고, get할 때 값을 가져오는 로직을 넣을 수 있다. | ||
+ | * 단, 객체 Type은 '' | ||
+ | <code java> | ||
+ | Cache< | ||
+ | .maximumSize(1000) | ||
+ | .build(); // look Ma, no CacheLoader | ||
+ | ... | ||
+ | try { | ||
+ | // If the key wasn't in the "easy to compute" | ||
+ | // do things the hard way. | ||
+ | cache.get(key, | ||
+ | @Override | ||
+ | public Value call() throws AnyException { | ||
+ | return doThingsTheHardWay(key); | ||
+ | } | ||
+ | }); | ||
+ | } catch (ExecutionException e) { | ||
+ | throw new OtherException(e.getCause()); | ||
+ | } | ||
+ | </ |