Flare Java Client Library
Flare が自分の利用シーンにマッチしている一方で、Java から利用する必要があったので、memcached client for java をベースにして、Flare 用のクライアントライブラリを作ってみました。
ソースの方は、初めての利用ですが、
に置いてみました。とりあえず、コードを書いた、という段階です。
Flare 自体は基本的に memcached 互換なので、memcached client for java でももちろん使えるのですが、sync オプションなどいくつか Flare 独自の拡張もあるので、それらに対応してみた形です。
実際に使うクラスは、FlaredClient と FlareiClient です。前者が、ノードサーバに値を設定したり、取得したりする場合に使うものです。後者はインデックスサーバに対するクライアントです。
ビルド
まだ、jar をどこかで公開しているわけではないので、
$ ant package -Dver=0.1-snapshot -Dlog4j=1
のようにしてビルドすることで jar ができます。
FlaredClient の利用イメージ
まず、プールの初期化ですが Flare では、ローカルの proxy 経由でアクセスすることが普通(?)なように思うので、memcached にアクセスするときのように複数サーバを指定する必要もなく、ハッシュアルゴリズムの指定も不要と思います。
SockIOPool pool = SockIOPool.getInstance(poolName); pool.setServers(new String[]{ "localhost:12124" }); pool.setFailover(false); pool.setFailback(false); pool.initialize();
sync オプションを有効にしたい場合は、FlaredClient インスタンスに対して行うようにしました。
FlaredClient fc = new FlaredClient(poolName); fc.setSync(true);
あとは、通常の memcached client for java のように set, get するだけです。
String key1 = "key1"; String key2 = "key2"; String key3 = "key3"; fc.set(key1, "value"); fc.set(key2, 100); fc.set(key3, new Date()); System.out.println(key1 + ": " + fc.get(key1)); System.out.println(key2 + ": " + fc.get(key2)); System.out.println(key3 + ": " + fc.get(key3));
FlaredClient では Flare の dump コマンドにも対応しているので、以下のようにすると指定ノードのデータを dump できます。
String[] servers = new String[] { "localhost:12121", "localhost:12123" }; Map<String, Map<String, Object>> result = fc.dump(servers); for (Map.Entry<String, Map<String, Object>> e1 : result.entrySet()) { String server = e1.getKey(); for (Map.Entry<String, Object> e2 : e1.getValue().entrySet()) { System.out.println(server + ": " + e2.getKey() + " = " + e2.getValue()); } }
はたして需要があるのだろうか?と思いつつ、せっかく書いてみたのでオープンにしました。
ツッコミやご意見あればお願いします。