異なる保存キーねえすべてのように使用して、GoogleのCacheBuilder /のCacheLoader:かなりまっすぐ進むグァバCacheBuilderとルックアップキー
CacheBuilder.newBuilder().maximumSize(MAX_SIZE).expireAfterAccess()
.build(new CacheLoader<String, Object>() {
@Override
public Object load(String key) throws Exception {
return Query(key);
}
});
。キーは、キャッシュにないときにロードするためのクエリで使用され、実際にはかなり大きいことがあります。実際にキャッシュのハッシュをキャッシュに保存したいので、キャッシュ内のルックアップが実際に実行されたときにキーのハッシュが使用されますが、ロードが完了すると、キーは実際には完全なクエリになります。
基本的には、関数を取得するためにクエリを送信して、キーの検索またはキャッシュ記憶域の直前に私のプログラムがキャッシュを使用するようにしたいと思います。フック関数があるのだろうかと思います。 ?事前に
おかげ
更新:
は、だから私は、getの呼び出し可能なバージョンを使用して解決策を考え出しました。私は私自身のコンテナ内のキャッシュをラップする場合:
class WrappedCache {
private Cache<String, Object> mInnerCache;
public Object get(String key) {
String hashedKey = Hash(key); // get hashed key
return mInnerCache.get(hashedKey, new Callable<Object>() {
return Query(key);
}
}
}
この方法は、内部キャッシュは、ハッシュ値を扱うが、それはそれのアクションを実行するためにそれを必要とする場合に呼び出し可能で、元のクエリを取得します。
もっと複雑な解決策が必要だった場合、WrappedCache
はCache<K,V>
インターフェイスを実装することができましたが、私の使用例は少しシンプルであり、上記で取り除くことができます。
いいえ、Guavaはこれをサポートしていません。 –
FYI:Guavaには 'AbstractCache'と' AbstractLoadingCache'があり、そうすることを選択した場合は独自の 'Cache' /' LoadingCache'を実装する必要があります。 – mfulton26