Guava(キャッシュ)
6537 ワード
キャッシュ:
MapMakerクラス MapMakerは、ほとんどの基本キャッシュ機能の提供者として機能する.
Guavaキャッシュ:
Cacheクラス:基本動作
上記のcache.getは、通常の操作の代わりに有効です.
Callableで値を取得するのは非同期プロセスです.非同期で値を取得することもできます.
キャッシュされたデータを無効にすることもできます.
LoadingCacheクラス: LoadingCacheはCacheの拡張クラスであり、セルフロード機能を有する. 基本操作.
CacheBuilderクラス: CacheBuilderは、ビルダーモードによってCacheおよびLoadingCacheインスタンスを構築する. LoadingCacheオブジェクトインスタンス1を構築します. SoftReferenceオブジェクトによる自動回収 を実現する.キャッシュを自動的にリフレッシュできるLoadingCache を構築
CacheBuilderSpec: CacheBuilderSpecは、CacheBuilderを構築する際の構成の説明に使用することができる. CacheBuilderSpecによるLoadingCacheの構築:
CacheLoaderクラス: CacheLoader の構築
CacheStatsクラス:は、いくつかのキャッシュ情報を収集するために使用される. CacheStatオブジェクト を取得する CacheStatで入手可能な情報
RemovalListenerクラス: Cacheのkeyが除去されたときを傍受するために使用される.
RemovalNotificationクラス:は、RemovalListenerをトリガするonRemovalのパラメータ入力を受信するために用いられ、対応するkey、value等を取得することができる. RemovalNotification.getCause()によって、オブジェクトが除去された理由も知ることができる.
RemovalListenersクラス: RemovalListenerのonRemovalトリガ動作 を非同期で実行できます.
上記の手順では、RemovalListenerを登録する必要があります. CacheBuilderの前.
MapMakerクラス
ConcurrentMap<String,Book> books = new MapMaker().concurrencyLevel(2) // , 2 , 4
.softValues() // SoftReference value
.makeMap(); // Map
Guavaキャッシュ:
Cacheクラス:
put(key,value); // key-value
V value = cache.get(key, Callable<? Extends V> value); // key , Callable call key
上記のcache.getは、通常の操作の代わりに有効です.
value = cache.get(key);
if(value == null){
value = someService.retrieveValue();
cache.put(key,value);
}
Callableで値を取得するのは非同期プロセスです.非同期で値を取得することもできます.
cache.get(key,Callables.returning(someService.retrieveValue()); // key
キャッシュされたデータを無効にすることもできます.
invalidate(key) // key
invalidateAll() //
invalidateAll(Iterable<?> keys) // keys
LoadingCacheクラス:
Book book = loadingCache.get(id); // key id
ImmutableMap<key,value> map = cache.getAll(Iterable<? Extends key>); // key , map
refresh(key); // key
CacheBuilderクラス:
LoadingCache<String, TradeAccount> traLoadingCache =
CacheBuilder.newBuilder()
.expireAfterAccess(5L, TimeUnit.MINUTES) //5
.maximumSize(5000L) // 5000
.removalListener(new TradeAccountRemovalListener()) //
.ticker(Ticker.systemTicker()) //
.build(new CacheLoader<String, TradeAccount>(){
@Override
public TradeAccount load(String key) throws Exception {
// load a new TradeAccount not exists in cache
return null;
}
});
LoadingCache<String, TradeAccount> traLoadingCache =
CacheBuilder.newBuilder()
.expireAfterAccess(5L, TimeUnit.MINUTES) //5
.softValues() // SoftReference value, ,
.removalListener(new TradeAccountRemovalListener()) //
.ticker(Ticker.systemTicker()) //
.build(new CacheLoader<String, TradeAccount>(){
@Override
public TradeAccount load(String key) throws Exception {
// load a new TradeAccount not exists in cache
return null;
}
});
LoadingCache<String, TradeAccount> traLoadingCache =
CacheBuilder.newBuilder()
.concurrencyLevel(10) // 10
.refreshAfterWrite(5L, TimeUnit.SECONDS) //5
.removalListener(new TradeAccountRemovalListener()) //
.ticker(Ticker.systemTicker()) //
.build(new CacheLoader<String, TradeAccount>(){
@Override
public TradeAccount load(String key) throws Exception {
// load a new TradeAccount not exists in cache
return null;
}
});
CacheBuilderSpec:
String configString = "concurrencyLevel=10,refreshAfterWrite=5s"
String spec = "concurrencyLevel=10,expireAfterAccess=5m,softValues";
CacheBuilderSpec cacheBuilderSpec = CacheBuilderSpec.parse(spec);
CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.from(cacheBuilderSpec);
LoadingCache<String, TradeAccount> traLoadingCache = cacheBuilder
.ticker(Ticker.systemTicker())
.removalListener(new TradeAccountRemovalListener())
.build(new CacheLoader<String, TradeAccount>(){
@Override
public TradeAccount load(String key) throws Exception {
// load a new TradeAccount not exists in cache
return null;
}
});
CacheLoaderクラス:
// Function CacheLoader,
CacheLoader<Key,value> cacheLoader = CacheLoader.from(Function<Key,Value> func);
// Supplier CacheLoader
CacheLoader<Object,Value> cacheLoader = CacheLoader.from(Supplier<Value> supplier);
CacheStatsクラス:
LoadingCache<String,TradeAccount> tradeAccountCache = CacheBuilder.newBuilder().recordStats() //
CacheStats cacheStats = cache.stats();
1.
2.
3.
...
RemovalListenerクラス:
RemovalNotificationクラス:
public enum RemovalCause {
//
EXPLICIT,
//
REPLACED,
//
COLLECTED,
//
EXPIRED,
//
SIZE;
}
RemovalListenersクラス:
RemovalListener<String,TradeAccount> myRemovalListener = new RemovalListener<String, TradeAccount>() {
@Override
public void onRemoval(RemovalNotification<String,TradeAccount> notification) {
//Do something here
}
};
RemovalListener<String,TradeAccount> removalListener =
RemovalListeners.asynchronous(myRemovalListener,executorService);
上記の手順では、RemovalListenerを登録する必要があります. CacheBuilderの前.