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を設定しておくといいだろう。この設定を行うことでプリミティブ型のラッパーオブジェクトも文字列に変換されて格納されるようになる。