memcached client for javaの設定

前項のサンプルでは必要最小限の設定のみを行ったが、SockIOPoolにはmemcachedとの接続に関する様々な設定を行うことができる。

例えば複数のmemcachedサーバを使用する場合、以下のようにsetServers()メソッドでサーバ名を、setWeight()メソッドでそれぞれのサーバのウェイトを指定することができる。

SockIOPool pool = SockIOPool.getInstance();

String[] servers = {
  "server1.mydomain.com:11211",
  "server2.mydomain.com:11211",
  "server3.mydomain.com:11211"
};

Integer[] weights = { 3, 3, 2 };

pool.setServers(servers);
pool.setWeights(weights);

また、以下のようにコネクションプールに関する設定を行うことも可能だ。SockIOPoolはシングルトンオブジェクトとなっており、MemCachedClientはこのSockIOPoolから接続を取得するため、特に接続数については利用シーンに応じて適切な設定を行うことが重要だ。

pool.setInitConn(5); // 初期接続数
pool.setMinConn(5); // 最小接続数
pool.setMaxConn(250); // 最大接続数
pool.setMaxIdle(1000 * 60 * 60 * 6); // 最大アイドル時間
pool.setSocketTO(3000); // 読み取りタイムアウト
pool.setSocketConnectTO(0); // 接続タイムアウト

memcached client for javaはGZIP圧縮もサポートしており、一定サイズ以上のデータをセットしようとした場合にGZIP圧縮してmemcachedに格納することができる。

MemCachedClient mcc = new MemCachedClient();

mcc.setCompressEnable(true); // GZIP圧縮を有効にする
mcc.setCompressThreshold(64 * 1024); // GZIP圧縮を行うしきい値を設定

複数の言語でmemcachedを共有する場合には注意が必要だ。memcached client for javaはデフォルトではIntegerやLongといったプリミティブ型のラッパーオブジェクトをシリアライズしてmemcachedに格納するため、他言語のライブラリからは読み取ることができない。このような場合はMemCachedClientのsetPrimitiveAsString()メソッドにtrueを設定しておくといいだろう。この設定を行うことでプリミティブ型のラッパーオブジェクトも文字列に変換されて格納されるようになる。