私はGoogleのGuavaライブラリーを初めて利用し、Guavaのキャッシングパッケージに興味があります。現在、バージョン10.0.1をダウンロードしています。ドキュメンテーションを確認した後、JUnitはソースコードをテストし、グーグルを広範囲に検索した後でも、キャッシングパッケージの使用方法を理解できません。ドキュメントは、私のような初心者のためではなく、Guavaのライブラリを使用している人のために書かれたかのように、非常に短いものです。キャッシングパッケージを適切に使用する方法の実例がもっとあればよいのですが。
最短未使用(LRU)エビクションメソッドを使用して、有効期限のない10個のアイテムのキャッシュを構築するとします。したがって、APIにある例から、次のようなコードを作成します。
Cache<String, String> mycache = CacheBuilder.newBuilder()
.maximumSize(10)
.build(
new CacheLoader<String, String>() {
public String load(String key) throws Exception {
return something; // ?????
}
});
CacheLoaderが必要なので、CacheBuilderのbuildメソッドに含める必要があります。しかし、mycacheから適切な値を返す方法がわかりません。
アイテムをmycacheに追加するには、次のコードを使用します。
mycache.asMap().put("key123", "value123");
Mycacheからアイテムを取得するには、次のメソッドを使用します。
mycache.get("key123")
Getメソッドは、mycacheから値を取得するのではなく、常にCacheLoaderのloadメソッドから返された値を返します。誰かが私が逃したものを親切に教えてくれませんか?
GuavaのCache
タイプは、一般にcomputingキャッシュとして使用することを目的としています。通常、手動で値を追加することはありません。むしろ、必要なコードを含むCacheLoader
を与えることによって、キーの値を計算するために負荷がかかる方法をロードする方法を伝えます。
典型的な例は、データベースからの値のロードまたは負荷の高い計算の実行です。
_private final FooDatabase fooDatabase = ...;
private final LoadingCache<Long, Foo> cache = CacheBuilder.newBuilder()
.maximumSize(10)
.build(new CacheLoader<Long, Foo>() {
public Foo load(Long id) {
return fooDatabase.getFoo(id);
}
});
public Foo getFoo(long id) {
// never need to manually put a Foo in... will be loaded from DB if needed
return cache.getUnchecked(id);
}
_
また、あなたが与えた例を試してみましたが、mycache.get("key123")
は_"value123"
_を期待どおりに返しました。