かみぽわーる

kamipo's blog

mycachedがmsgpack対応してた

mycachedを入れようと思ってtrunkのコード見てたら、mycachedのレスポンス形式にmsgpackが追加されてた。知らなかった。

msgpack-0.4.3のインストール。

cd /usr/local/src
wget http://downloads.sourceforge.net/project/msgpack/msgpack/cpp/msgpack-0.4.3.tar.gz
tar zxvf msgpack-0.4.3.tar.gz
cd msgpack-0.4.3
./configure && make && make install

mycachedのインストール。

cd /usr/local/src
svn co http://svn.coderepos.org/share/platform/mysql/mycached/trunk mycached
cd mycached
g++ -DMYCACHED_USE_EPOLL=1 -DMSGPACK=1 -shared -fPIC -Wall -g -O2 -I../mysql-5.1.50/include -I../mysql-5.1.50/sql -I../mysql-5.1.50/regex mycached_as_udf.cc -o mycached_as_udf.so
install -m 755 mycached_as_udf.so /usr/local/mysql/lib/mysql/plugin
/usr/local/mysql/bin/mysql -u root -e "CREATE FUNCTION mycached_start RETURNS INT SONAME 'mycached_as_udf.so'"
/usr/local/mysql/bin/mysql -u root -e "CREATE FUNCTION mycached_stop RETURNS INT SONAME 'mycached_as_udf.so'"
/usr/local/mysql/bin/mysql -u root -e "SELECT mycached_start(inet_aton('127.0.0.1'), 11211, 4);"

動作確認しててgetできないテーブルがあったのでコード見てみたら、今のところmycachedはPRIMARY KEYがintじゃないとダメらしい。
msgpackのレスポンスがバイナリなのでコピペがうまくいってないけど、msgpackがデータサイズ18バイトで一番効率がよい。

% telnet localhost 11211
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get test.t1.1
VALUE test.t1.1 0         20
id:1:1message:4:hoge
END
get test.t1.1:json
VALUE test.t1.1 0         25
{"id":1,"message":"hoge"}
END
get test.t1.1:msgpack
VALUE test.t1.1 0         18
��id�message�hoge
END