第2章 ローカルキャッシュ
Data Grid はクラスターモードで特に興味深いものですが、非常に有能なローカルモードも提供します。このモードでは、ConcurrentHashMap
と同様の単純なインメモリーデータキャッシュとして機能します。
ただし、マップではなくローカルキャッシュを使用するのはなぜでしょうか。キャッシュは、単純なマップよりも多くの機能を提供します。これには、永続ストアへのライトスルーおよびライトビハインド、エントリーのエビクション、メモリー不足や有効期限の発生を防ぐことができます。
Data Grid の Cache
インターフェイスは、JDK の ConcurrentMap を
拡張し、マップから DataGrid への移行を簡単にします。
Data Grid キャッシュは、既存のトランザクションマネージャーと統合するか、別のトランザクションマネージャーを実行するトランザクションもサポートします。ローカルキャッシュトランザクションには、2 つの選択肢があります。
-
ロックのタイミング。悲観的ロックは、書き込み操作時、またはユーザーが
AdvancedCache.lock(keys)
を明示的に呼び出したときにキーをロックします。楽観的ロックは、トランザクションのコミット中にのみキーをロックし、代わりに、現在のトランザクションがキーを読み取った後に別のトランザクションが同じキーを変更した場合は、コミット時にWriteSkewCheckException
を出力します。 - 分離レベルread-committed および repeatable read をサポートします。
2.1. シンプルキャッシュ
従来のローカルキャッシュは、クラスター化されたキャッシュと同じアーキテクチャーを使用します。つまり、インターセプタースタックを使用します。これにより、多くの実装を再利用できます。ただし、高度な機能が不要でパフォーマンスがより重要な場合は、インターセプタースタックを削除して、単純なキャッシュを使用できます。
そのため、どの機能も削除されますか。設定の観点からは、簡単なキャッシュは以下に対応していません。
- トランザクションと呼び出しバッチ処理
- 永続性 (キャッシュストアおよびローダー)
- カスタムインターセプター (インターセプタースタックなし)
- インデックス化
- トランスコーディング
- バイナリーとして保存 (ローカルキャッシュに非常に便利です)
API パースペクティブから、これらの機能は例外を出力します。
- カスタムインターセプターの追加
- 分散済みエグゼキューターフレームワーク
そして、何が残っていますか。
- 基本的なマップのような API
- キャッシュリスナー (ローカルリスナー)
- 有効期限
- eviction
- security
- JMX アクセス
統計 (ただし、最大のパフォーマンスを得るには、statistics-available=false を使用してこれをオフにすることが推奨されます)
- 宣言型設定
<local-cache name="mySimpleCache" simple-cache="true"> <!-- Additional cache configuration goes here. --> </local-cache>
- プログラムによる設定
DefaultCacheManager cm = getCacheManager(); ConfigurationBuilder builder = new ConfigurationBuilder().simpleCache(true); cm.defineConfiguration("mySimpleCache", builder.build()); Cache cache = cm.getCache("mySimpleCache");
サポートされていない機能に対する簡単なキャッシュチェック。たとえばトランザクションを使用するよう設定すると、設定検証によって例外が出力されます。