第2章 ローカルキャッシュ

Data Grid はクラスターモードで特に興味深いものですが、非常に有能なローカルモードも提供します。このモードでは、ConcurrentHashMap と同様の単純なインメモリーデータキャッシュとして機能します。

ただし、マップではなくローカルキャッシュを使用するのはなぜでしょうか。キャッシュは、単純なマップよりも多くの機能を提供します。これには、永続ストアへのライトスルーおよびライトビハインド、エントリーのエビクション、メモリー不足や有効期限の発生を防ぐことができます。

Data Grid の Cache インターフェイスは、JDK の ConcurrentMap を 拡張し、マップから DataGrid への移行を簡単にします。

Data Grid キャッシュは、既存のトランザクションマネージャーと統合するか、別のトランザクションマネージャーを実行するトランザクションもサポートします。ローカルキャッシュトランザクションには、2 つの選択肢があります。

  1. ロックのタイミング。悲観的ロックは、書き込み操作時、またはユーザーが AdvancedCache.lock(keys) を明示的に呼び出したときにキーをロックします。楽観的ロックは、トランザクションのコミット中にのみキーをロックし、代わりに、現在のトランザクションがキーを読み取った後に別のトランザクションが同じキーを変更した場合は、コミット時に WriteSkewCheckException を出力します。
  2. 分離レベル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");

サポートされていない機能に対する簡単なキャッシュチェック。たとえばトランザクションを使用するよう設定すると、設定検証によって例外が出力されます。