memcached client for javaを使ってみよう

まずはmemcached client for javaを使用した最も簡単なサンプルを見てみよう。

// コネクションプールの初期化
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(new String[]{"localhost:11211"});
pool.initialize();

MemCachedClient mcc = new MemCachedClient();

// 値をセット
mcc.set("name", "Naoki Takezoe");

// 値を取得して表示
String name = (String) mcc.get("name");
System.out.println(name);

memcachedへのアクセスはMemCachedClientを通して行い、値のセットにはset()メソッド、取得にはget()メソッドを使用する。値が存在しない場合、get()メソッドはnullを返す。また、set()メソッドには文字列以外にシリアライズ可能なJavaオブジェクトを渡すこともできる。この場合、memcachedにはオブジェクトをバイナリシリアライズしたバイト列が格納される。

また、set()メソッドで値をセットする際にキャッシュに有効期限を指定することもできる。

// 現在時刻から1時間有効なキャッシュ
long time = Calendar.getInstance().getTimeInMillis();
time = time + 1000 * 60 * 60;
Date date = new Date(time);

mcc.set("name", "Naoki Takezoe", date);

データの設定や取得に関するMemCachedClientの主なメソッドを以下に示す。

メソッド 説明
boolean set(String key, Object value) 指定されたキーで値をセットする。
boolean add(String key, Object value) 指定されたキーが存在しない場合のみ値をセットする。
boolean replace(String key, Object value) 指定されたキーが存在する場合のみ値を更新する。
boolean delete(String key) 指定されたキーを削除する。
boolean storeCounter(String key, long counter) 指定されたキーと初期値でカウンタを作成する。
long getCounter(String key) 指定されたキーのカウンタの値を取得する。キーが存在しない場合は-1を返す。
long addOrIncr(String key) 指定されたキーが存在しなければカウンタを作成し、存在すればインクリメントした値を返す。
long addOrDecr(String key) 指定されたキーが存在しなければカウンタを作成し、存在すればデクリメントした値を返す。
long incr(String key) 指定されたキーの値をインクリメントする。
long decr(String key) 指定されたキーの値をデクリメントする。
Object get(String key) 指定されたキーの値を取得する。キーが存在しない場合はnullを返す。
Object[] getMultiArray(String[] keys) 複数のキーを指定し、値を配列で返す。
Map getMulti(String[] keys) 複数のキーを指定し、キーと値のマップを返す。
boolean flushAll() memcachedのすべてのデータを削除する。

更新系のメソッドは操作が成功した場合true、失敗した場合はfalseを返す。前述の通り引数にDateオブジェクトを渡すことでキャッシュの有効期限を指定することも可能だ。また、カウンタのインクリメント・デクリメントを行うメソッドについては増分を指定することもできる。

現在のmemcached client for javaにはmemcachedでサポートされているコマンドのうち、getsやcas(更新の排他処理を行うためのもの)といった比較的最近実装されたコマンドを利用するためのAPIは存在しない。このあたりは今後のバージョンアップに期待したいところだ。