2011-10-25 8 views
5

질문에 CacheBuilder를 사용하고 싶습니다만, 내 값은 비동기 적으로 가져옵니다. CacheLoader는 요구 사항이 아니기 때문에 이전에는 MapMaker에서 작동했습니다. 이제이 파일을 해킹 할 수 있는지 또는 비 권장되지 않는 대체 방법이 있는지 알고 싶습니다. 고맙습니다.누군가가 Guava의 CacheLoader를 비동기 적으로 사용하는 방법

+2

이 질문은 실제로 모든 것을 말하지 않습니다. 당신이하고있는 일과 캐시가 당신을 위해 일하지 않는 이유를 더 분명하게 설명해 주시겠습니까? – ColinD

+1

'MapMaker'를 사용하여 비 - 계산 'ConcurrentMap'을 만들고,'map.put'을 통해 채울 것이라고 추측합니다. Guava 10.0.1에서는'cache.asMap(). put'을 사용하여'Cache'를 사용하여이 작업을 수행 할 수 있습니다. – Ray

+0

@ColinD : 여기서 문제는 데이터 집합을 비공식적으로 구멍으로 가져 와서 셋업 캐시, 컴퓨팅은 구멍이 필요합니다, 나는 이런 식으로 캐시를 사용할 수 없습니다. –

답변

5

내가 물어 보려는 질문은 "CacheLoader를 지정하지 않고도 CacheBuilder를 어떻게 사용할 수 있습니까?"라고 생각합니다. 그렇다면 구아바 11.0 버전에서이를 지원할 것입니다. 한편 CacheLoader에 빌드() 메소드는 이미 (오늘 아침 현재) 트렁크에 체크인 :

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

+0

예, 특히 데이터가 비동기 적으로 검색되는 프로세스에서 유효한 유스 케이스라고 생각합니다. 입력 해 주셔서 감사합니다. –

+0

아, 원하는 것이 비동기 CacheLoader라면, 우리가 이야기하고있는 것이지만, 곧 발생하지는 않을 것입니다 ... – fry

1

한 가지 방법은 원하는 출력으로 일반적인 매개 변수 K 및 V와 함께하게 될 것이다 :

LoadingCache<K, ListenableFuture<V>> values = CacheBuilder.newBuilder() 
    .build(
     new CacheLoader<K, ListenableFuture<V>>() { 
     public ListenableFuture<V> load(K key) { 
      /* Get your future */ 
     } 
     }); 
관련 문제