nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
アプリケーション開発において、情報を一時的にキャッシュしておき、情報へのアクセスを高速にしたい場合があります。
また、キャッシュされたオブジェクトは、キャッシュ領域を圧迫し続けないように、一定の条件下でキャッシュから溢れてキャッシュアウトされる必要があります。
情報を集合的にキャッシュする機能を抽象化したのがCacheで、キーと値の集合でキャッシュする機能を抽象化したのがCacheMapです。
また、キャッシュから溢れてキャッシュアウトする機能を抽象化したのが、OverflowControllerで、その機能を、どれだけ溢れるかを検証するOverflowValidator、どれを溢れさせるかを決めるOverflowAlgorithm、どのように溢れさせるかを決めるOverflowActionに細分化しています。
関連するパッケージは、以下です。
オブジェクトを集合的にキャッシュする事ができます。
APIとしては、java.util.Setとほぼ互換性のあるインタフェースとなっており、任意のオブジェクトを登録して、集合的に管理できます。
アプリケーション向けインタフェースCacheを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.cache.Cache;
- import jp.ossc.nimbus.service.cache.CachedReference;
- // Cacheを取得
- Cache cache = (Cache)ServiceManagerFactory.getServiceObject("Cache");
- // キャッシュして、キャッシュ参照を受け取る
- CachedReference ref = cache.add("hoge");
- // キャッシュ参照から値を取得する
- // キャッシュから溢れてキャッシュされている場合は、nullが返る
- System.out.println(ref.get());
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.MemoryCacheService | メモリ中にキャッシュする |
jp.ossc.nimbus.service.cache.FileCacheService | ファイルにキャッシュする |
jp.ossc.nimbus.service.cache.SerializedMemoryCacheService | 直列化してメモリ中にキャッシュする |
オブジェクトをキーに紐付けてマップ的にキャッシュする事ができます。
APIとしては、java.util.Mapを継承したインタフェースとなっており、任意のオブジェクトをキーに紐付けて登録して、集合的に管理できます。
アプリケーション向けインタフェースCacheMapを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.cache.CacheMap;
- import jp.ossc.nimbus.service.cache.KeyCachedReference;
- // CacheMapを取得
- CacheMap cache = (CacheMap)ServiceManagerFactory.getServiceObject("CacheMap");
- // キャッシュする
- cache.put("hoge", "fuga");
- // キャッシュから値を取得する
- // キャッシュから溢れてキャッシュされている場合は、nullが返る
- System.out.println(cache.get("hoge”));
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.MemoryCacheMapService | メモリ中にキャッシュする |
jp.ossc.nimbus.service.cache.FileCacheMapService | ファイルにキャッシュする |
jp.ossc.nimbus.service.cache.SerializedMemoryCacheMapService | 直列化してメモリ中にキャッシュする |
キャッシュサービス向けインタフェースOverflowControllerは、Cache、CacheMapサービスに、あふれ制御機能を付加するサービスのインタフェースです。
ここでいう、あふれ制御機能とは、「どれだけ溢れるのか」、「どれが溢れるのか」、「どのように溢れるのか」の3つの機能を連携させる事を指し、それぞれOverflowValidator、OverflowAlgorithm、OverflowActionインタフェースに委譲されます。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.cache.Cache | あふれ制御機能を付加するために使用する。 |
jp.ossc.nimbus.service.cache.CacheMap | あふれ制御機能を付加するために使用する。 |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.DefaultOverflowControllerService | デフォルト実装 |
OverflowControllerサービス向けインタフェースOverflowValidatorは、OverflowControllerサービスの、あふれ制御機能のうち、「どれだけ溢れるのか」を抽象化したインタフェースです。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.cache.OverflowController | あふれ制御機能のうち、「どれだけ溢れるのか」を決めるために使用する。 |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.CacheSizeOverflowValidatorService | キャッシュされているオブジェクトの数を閾値として溢れる数を決める。 |
jp.ossc.nimbus.service.cache.MemorySizeOverflowValidatorService | ヒープメモリ使用量を閾値として溢れる数を決める。 |
jp.ossc.nimbus.service.cache.CalculateMemorySizeOverflowValidatorService | キャッシュされているオブジェクトのメモリ使用量(理論計算)を閾値として溢れる数を決める。 |
jp.ossc.nimbus.service.cache.TimeExpierOverflowValidatorService | キャッシュされてから経過した時間を閾値として溢れる数を決める。 |
OverflowControllerサービス向けインタフェースOverflowAlgorithmは、OverflowControllerサービスの、あふれ制御機能のうち、「どれを溢れさせるのか」を抽象化したインタフェースです。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.cache.OverflowController | あふれ制御機能のうち、「どれを溢れさせるのか」を決めるために使用する。 |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.FIFOOverflowAlgorithmService | First In First Outで溢れるオブジェクトを決める。 |
jp.ossc.nimbus.service.cache.LFUOverflowAlgorithmService | Least Frequency Usedで溢れるオブジェクトを決める。 |
jp.ossc.nimbus.service.cache.LIFOOverflowAlgorithmService | Last In First Outで溢れるオブジェクトを決める。 |
jp.ossc.nimbus.service.cache.LRUOverflowAlgorithmService | Least Recently Usedで溢れるオブジェクトを決める。 |
OverflowControllerサービス向けインタフェースOverflowActionは、OverflowControllerサービスの、あふれ制御機能のうち、「どのように溢れるのか」を抽象化したインタフェースです。
このインタフェースの実装サービスは、下位サービスで、以下の上位サービスから使用します。
上位サービスインタフェース | 用途 |
jp.ossc.nimbus.service.cache.OverflowController | あふれ制御機能のうち、「どのように溢れるのか」を決めるために使用する。 |
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.cache.RemoveOverflowActionService | キャッシュから削除する。 |
jp.ossc.nimbus.service.cache.StoreCacheOverflowActionService | 二次キャッシュに退避する。 |
jp.ossc.nimbus.service.cache.SoftReferenceOverflowActionService | ソフト参照に変えて、二次キャッシュに退避する。 |
jp.ossc.nimbus.service.cache.ContextSaveOverflowActionService | コンテキストの永続化機能を使って、永続化を行い、キャッシュから削除する。 |
サンプルは、以下。