第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 を使用する最も一般的なパターンを示しています。

// Id of the person to look up, provided by the application
PersonId id = ...;

// Get a reference to the cache where person instances will be stored
Cache<PersonId, Person> cache = ...;

// First, check whether the cache contains the person instance
// associated with with the given id
Person cachedPerson = cache.get(id);

if (cachedPerson == null) {
   // The person is not cached yet, so query the data store with the id
   Person person = dataStore.lookup(id);

   // Cache the person along with the id so that future requests can
   // retrieve it from memory rather than going to the data store
   cache.putForExternalRead(id, person);
} else {
   // The person was found in the cache, so return it to the application
   return cachedPerson;
}
Copy to Clipboard Toggle word wrap

putForExternalRead は、アプリケーション実行から発信された新しい Person インスタンスでキャッシュを更新するメカニズムとして使用しないでください(Person のアドレスを変更するトランザクションから)。キャッシュされた値を更新する場合は、標準のput操作を使用してください。使用しないと、破損したデータをキャッシュする可能性が高くなります。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat