ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

Kestrelはflagを無視する

Kestrel ignores memcache flags
チケットとしても起票されてたみたいだけど、その後特に対応することもなく閉じられたみたい。
Twitter内部ではflagを使ってないんでしょうね。。

Scalaを学習して改修するか、バイト配列のまんまでやり取りするしかないんか。。

んー、バイト配列のまんまは危険なのでやなんだけど、例えばMemcachedClientの方に少し手を入れて、StringとString以外のオブジェクトをサポート出来れば、プリミティブ型は全部諦めればいいかなー。。。
こんな感じ? ↓
http://github.com/ikeike443/Memcached-Java-Client/commit/60c88eaa4880bc9275027bd1fbac9b493208de08#commitcomment-116465

で、こんなふうに使う?

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import com.meetup.memcached.MemcachedClient;
import com.meetup.memcached.SockIOPool;

public class KestrelTest {
	public static void main(String[] args) throws ClassNotFoundException, IOException{
		SockIOPool pool = SockIOPool.getInstance();
		pool.setServers(new String[]{"localhost:22133"});
		pool.initialize();

		MemcachedClient mcc = new MemcachedClient();

		MyObject myObject = new MyObject();
		mcc.set("name", "aho");
		mcc.set("name", "baka");
		mcc.set("obj",myObject);

		String name = (String) mcc.get("name",null,true);
		System.out.println(name);
		String name2 = (String) mcc.get("name",null,true);
		System.out.println(name2);
		byte[] obj = (byte[]) mcc.get("obj");
		ObjectInputStream inObject = new ObjectInputStream(new ByteArrayInputStream( obj));
		MyObject readObject = (MyObject) inObject.readObject();
		System.out.println(readObject.toString());
	}
}

やだな。。せめてdecodeをいじるか。。