#chiroito ’s blog

Java を中心とした趣味の技術について

Infinispan をクライアントサーバモードで使ってみる

今回は、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 に対応したメトリックを出力できます。その中で、キャッシュに入れたデータの数、キャッシュからデータが取れた数、キャッシュへデータを格納した数、キャッシュからデータが取れなかった数を可視化したのが以下の図になります。

f:id:chiroito:20200317193318p:plain

具体的なメトリック名は以下になります。

  • 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