2013-10-31 3 views
5

guavas CacheBuilder을 사용하고 싶지만이를 구현하는 방법을 명시 적으로 찾을 수 없습니다.guava CacheBuilder를 사용하는 방법?

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 
     .maximumSize(1000) 
     .build(
      new CacheLoader<Key, Graph>() { 
      public Graph load(Key key) throws AnyException { 
       return createExpensiveGraph(key); 
      } 
      }); 

질문 :

워드 프로세서는 다음 코드를 진술이 createExpensiveGraph(key) 방법은 무엇인가? 이 방법은 HashMap<Key, Value> 매핑을 반환하는 방법입니까? key 값으로 무엇을해야합니까?

또는이 방법으로 List<String>을 반환 할 수도 있습니다. 어떤 식 으로든 key 값을 사용할 필요가 없습니까?

Graph get(Key key) { 
    Graph result = get(key); 
    if(null == result) { 
     result = createNewGraph(key); 
     put(key, result); 
    } 
    return result; 
} 

플러스는 멀티 스레드 환경에서이 코드를 사용할 때 당신이 가지고있는 일반적인 동기화 문제 : 캐시의

+0

CacheLoader의 API를보고 메서드를 사용하는 이유를 명확히 설명하는 메서드를로드합니까? http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheLoader.html#load(K) createExpensiveGraph가 대신 GraphMask 개체를 반환합니다. –

+0

그것은 결과를 캐시하려고하는 모든 기능입니다. –

답변

17

아이디어는 일반적으로이 문제를 가지고있다.

구아바는 당신을위한 상용구입니다. createNewGraph()을 구현하면됩니다. Java가 작동하는 방식은 인터페이스를 구현해야 함을 의미합니다. 이 경우 인터페이스는 CacheLoader입니다.

캐시 전체가지도와 비슷하다고 생각하면 CacheLoader은지도에서 키를 찾을 수 없을 때마다 호출되는 콜백입니다. 로더는 키를 가져오고 (보통이 키에 필요한 객체를 만드는 데 유용한 정보가 포함되어 있기 때문에) 나중에 이 반환해야하는 값을 반환합니다.