3.7. ニアキャッシュ
ニアキャッシュは Hot Rod クライアントに対してローカルであり、最近使用されたデータを格納し、すべての読み取り操作でネットワークを通過する必要がないため、パフォーマンスが大幅に向上します。
ニアキャッシュ:
読み取り操作、
get()
またはgetVersioned()
メソッドの呼び出しが取り込まれます。
次の例では、put()
呼び出しはニアキャッシュにデータを入力せず、エントリーがすでに存在する場合にエントリーを無効にする効果しかありません。cache.put("k1", "v1"); cache.get("k1");
-
クライアントリスナーを登録して、Data Grid Server のリモートキャッシュでエントリーが更新または削除されたときにエントリーを無効にします。
エントリーが無効化された後に要求された場合、クライアントはそれらをリモートキャッシュから再度取得する必要があります。 - クライアントが別のサーバーにフェイルオーバーするとクリアされます。
バインドされているニアキャッシュ
キャッシュに含めることができるエントリーの最大数を指定して、常にバウンドニアキャッシュを使用する必要があります。ニアキャッシュがエントリーの最大数に達すると、古いエントリーを削除するため自動的に削除が行われます。そのため、クライアント JVM の境界内にキャッシュサイズを手動で維持する必要はありません。
ニアキャッシュ読み取りはエントリーの最終アクセス時間を伝播しないため、ニアキャッシュで最大アイドル有効期限を使用しないでください。
Bloom フィルター
Bloom フィルターは、無効化メッセージの総数を減らすことにより、書き込み操作のパフォーマンスを最適化します。
Bloom フィルター:
- Data Grid Server に存在し、クライアントが要求したエントリーを追跡します。
-
サーバーごとに最大 1 つのアクティブな接続があり、
WAIT
枯渇アクションを使用する接続プール設定が必要です。 - 無制限のニアキャッシュでは使用できません。
3.7.1. ニアキャッシュの設定
ニアキャッシュで Hot Rod Java クライアントを設定し、最近使用されたデータをクライアント JVM に保存します。
手順
- Hot Rod Java クライアント設定を開きます。
nearCacheMode(NearCacheMode.INVALIDATED)
メソッドでニアキャッシュを実行するように各キャッシュを設定します。注記Data Grid は、グローバルニアキャッシュ設定プロパティーを提供します。ただし、これらのプロパティーは非推奨となり、使用すべきではありませんが、代わりにキャッシュごとにニアキャッシュを設定する必要があります。
-
nearCacheMaxEntries()
メソッドでエビクションが発生する前に、ニアキャッシュが保持できるエントリーの最大数を指定します。 -
nearCacheUseBloomFilter()
メソッドでニアキャッシュの bloom フィルターを有効にします。
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.configuration.NearCacheMode; import org.infinispan.client.hotrod.configuration.ExhaustedAction; ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer() .host("127.0.0.1") .port(ConfigurationProperties.DEFAULT_HOTROD_PORT) .security().authentication() .username("username") .password("password") .realm("default") .saslMechanism("SCRAM-SHA-512") // Configure the connection pool for bloom filters. .connectionPool() .maxActive(1) .exhaustedAction(ExhaustedAction.WAIT); // Configure near caching for specific caches builder.remoteCache("books") .nearCacheMode(NearCacheMode.INVALIDATED) .nearCacheMaxEntries(100) .nearCacheUseBloomFilter(false); builder.remoteCache("authors") .nearCacheMode(NearCacheMode.INVALIDATED) .nearCacheMaxEntries(200) .nearCacheUseBloomFilter(true);