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をいじるか。。