2011-10-25 5 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を使用するにはどうすればよいですか?その場合、Guavaリリース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 */ 
     } 
     }); 
関連する問題