読者です 読者をやめる 読者になる 読者になる

kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

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());
    }
}

はたして需要があるのだろうか?と思いつつ、せっかく書いてみたのでオープンにしました。
ツッコミやご意見あればお願いします。