今回は、Infinispan をクライアントサーバモードでキャッシュを使用してみます。
デフォルト設定で作成してあるmycache
という名前のキャッシュを使用します。サンプルコードではまず、このキャッシュを取得します。最後にそのキャッシュにあるデータの件数やデータを取得・格納してみます。
クライアントサーバモードの環境構築についてはこちらを参照下さい。
Infinispan 10.1 の環境を構築する - #chiroito ’s blog
今回使うメソッドは以下のとおりです。使うクラスはライブラリモードと異なりますが、使うメソッドは同一です。
- データの件数を取得するには
RemoteCache#size()
メソッドを使用します。 - データの取得には
RemoteCache#get(K)
メソッドを使用し、Kには取得したいキーを指定します。 - データの格納には
RemoteCache#put(K, V)
メソッドを使用し、Kには格納したいキー、Vには格納したい値を指定します。
HotRodCacheAccess.java
import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; public class HotRodCacheAccess { public static void main(String[] args) { try(RemoteCacheManager manager = new RemoteCacheManager()) { RemoteCache<String, String> cache = manager.getCache("mycache"); // キャッシュのサイズを出力します。 System.out.println("Cache size is " + cache.size()); // キャッシュに入れてないデータがない事を確認します。 System.out.println("Value is " + cache.get("key")); // キャッシュにデータを入れます。 cache.put("key", "value"); // キャッシュのサイズを出力します。 System.out.println("Cache size is " + cache.size()); // キャッシュに入れたデータを確認します System.out.println("Value is " + cache.get("key")); } } }
Hot Rodのクライアント側の設定は以下のとおりです。クライアントが接続するサーバの設定をinfinispan.client.hotrod.server_list
でしています。
resouces/hotrod-client.properties
infinispan.client.hotrod.server_list=192.168.1.1:11222
出力結果は以下のとおりになります。最初のデータの件数は0で、値を取っても値がないのでnull
が返されます。次にデータを投入してから同様の処理をします。すると、データの件数は1件になり、値を取るとvalue
という値が返されています。
3 17, 2020 7:31:45 午後 org.infinispan.client.hotrod.RemoteCacheManager actualStart INFO: ISPN004021: Infinispan version: Infinispan 'Turia' 10.1.3.Final 3 17, 2020 7:31:45 午後 org.infinispan.client.hotrod.impl.protocol.Codec20 readNewTopologyAndHash INFO: ISPN004006: Server sent new topology view (id=1, age=0) containing 1 addresses: [192.168.1.1:11222] Cache size is 0 Value is null Cache size is 1 Value is value
クライアントサーバモードの場合は Prometheus に対応したメトリックを出力できます。その中で、キャッシュに入れたデータの数、キャッシュからデータが取れた数、キャッシュへデータを格納した数、キャッシュからデータが取れなかった数を可視化したのが以下の図になります。
具体的なメトリック名は以下になります。
- vendor_cache_manager_default_cache_mycache_statistics_number_of_entries
- vendor_cache_manager_default_cache_mycache_statistics_hits
- vendor_cache_manager_default_cache_mycache_statistics_stores
- vendor_cache_manager_default_cache_mycache_statistics_misses