문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
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()); | ||
| + | } | ||
| + | </ | ||