第3章 キャッシュ API
3.1. キャッシュインターフェース リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Data Grid のキャッシュは、キャッシュインターフェースを介して操作されます。https://access.redhat.com/webassets/avalon/d/red-hat-data-grid/7.3/api/org/infinispan/Cache.html
キャッシュは、JDK の ConcurrentMap インターフェースに公開されるアトミックメカニズムなど、エントリーを追加、取得、および削除するための簡単な方法を公開します。使用されるキャッシュモードに基づいて、これらのメソッドを呼び出すと、リモートノードにエントリを複製したり、リモートノードからエントリを検索することやキャッシュストアからエントリを検索することなど、数多くのことが発生します。
単純な使用方法では、Cache API を使用するのと JDK Map API を使用することはできないため、Map から Red Hat Data Grid の Cache への移行は簡単なはずです。
3.1.1. 特定のマップメソッドのパフォーマンスに関する懸念 リンクのコピーリンクがクリップボードにコピーされました!
Map で公開されるメソッドによっては、size( )、values ()、keySet()、および entrySet ()などの Red Hat Data Grid で使用すると、特定のパフォーマンス結果が得 られます。keySetの特定のメソッドであるvaluesおよびentrySetを使用できます。詳細については、Javadocを参照してください。
これらの操作をグローバルに実行しようとすると、パフォーマンスに大きな影響を及ぼし、スケーラビリティーのボトルネックにもなります。そのため、これらの方法は情報またはデバッグの目的でのみ使用してください。
withFlags メソッドで特定のフラグを使用すると、このような懸念を軽減することができることに注意してください。詳細は、各メソッドのドキュメントを確認してください。
3.1.2. Mortal および Immortal データ リンクのコピーリンクがクリップボードにコピーされました!
単にエントリーを格納するだけで、Red Hat Data Grid のキャッシュ API では、可変情報をデータに割り当てることができます。たとえば、単にput(key, value)を使用すると、immortal エントリーが作成されます。このエントリーは削除されるまで(またはメモリー不足にならないようにメモリーからエビクトされるまで)、いつまでもキャッシュに存在します。ただし、place (key, value, lifespan, timeunit)を使用してキャッシュにデータを配置すると、 mortal エントリーが作成されます。つまり、有効期限が固定されたエントリーとなり、そのライフスパンの後に有効期限が切れます。
Red Hat Data Grid は、有効期限を決定するための追加のメトリクスとして maxIdle もサポートしています。lifespans または maxIdles の任意の組み合わせを使用できます。
3.1.3. 有効期限および変動データ リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Data Grid でmortal データを使用する方法は、「 Expiration 」を参照してください。
3.1.4. putForExternalRead 操作 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Data Grid の Cache クラスには、putForExternalRead と呼ばれる別の 'put' 操作が含まれています。この操作は、Red Hat Data Grid が別の場所で永続化されるデータの一時的なキャッシュとして使用する場合に特に便利です。読み取りが非常に多い場合、キャッシュは単に最適化のために行われ、妨害するものではないため、キャッシュの競合によって実際のトランザクションが遅延してはなりません。
これには、PlaceForExternalRead はキーがキャッシュに存在しない場合にのみ動作する put 呼び出しとして機能し、別のスレッドが同時に同じ鍵を保存するかどうかを警告なしで失敗します。このようなシナリオでは、データのキャッシュはシステムを最適化する方法であり、キャッシュ内の障害が進行中のトランザクションに影響を及ぼすことが望ましいと言えます。そのため、失敗は異なる理由が処理されます。PlasForExternalRead は成功するかどうかに関わらず、ロックを待たず、呼び出し元のプロンプトに戻るため、高速操作と見なされます。
この操作の使用方法を理解するために、基本的な例を見てみましょう。PersonIdによって入力されるPersonインスタンスのキャッシュを想像してください。このデータは個別のデータストアから入力されます。以下のコードは、この例のコンテキスト内で putForExternalRead を使用する最も一般的なパターンを示しています。
putForExternalRead は、アプリケーション実行から発信された新しい Person インスタンスでキャッシュを更新するメカニズムとして使用しないでください(Person のアドレスを変更するトランザクションから)。キャッシュされた値を更新する場合は、標準のput操作を使用してください。使用しないと、破損したデータをキャッシュする可能性が高くなります。