2012年1月6日金曜日

memcashed

memcachedプロトコル

1.KVSにネットワーク経由でアクセスするための事実上標準プロトコル
2.TCP 11211番ポートを使用
3.テキストベースのプロトコル

コマンドについて
◆memcachedのインストール・起動
# cd /usr/ports/databases/memcached

# make installコンパイルとインストールが終わったら以下のようにしてデーモンの起動を行います。

# vi /etc/rc.conf
(以下の行を追加して保存します)
memcached_enable="YES"

# /usr/local/etc/rc.d/memcached start
以下のようにmemcachedが11211番ポートを待ち受ければ起動成功
IPv6にも対応しています。

% sockstat
grep memcached
nobody memcached 35580 16 tcp6 *:11211 *:*
nobody memcached 35580 17 tcp4 *:11211 *:*
nobody memcached 35580 18 udp6 *:11211 *:*
nobody memcached 35580 19 udp4 *:11211 *:*

memcachedプロトコルの主なコマンド
set データの保存
add データの保存 キーが既に存在しない場合のみ
replace データの保存 キーが既に存在する場合のみ
append 値への後方追加
prepend 値への前方追加
get データの取得
delete データの削除
incr 値への加算
decr 値への減算
stats 各種ステータスを表示
version ソフトウェアのバージョンを表示

※ memcachedプロトコルの仕様書は以下にあります。
http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

<コマンド> <key> <flags> <exptime> <bytes>
<data> <key>は保存するためのキー名を指定します。実装によっても異なりますが、最大長は250byteです。
<flags>はアプリケーション特有の32bitの値(0 04294967295)を指定することができ、データの取得時に格納した時の値が返されます。
<exptime>はデータの有効期間を秒数で指定します。指定した時間経過すると、自動的にキーが削除されます。0を指定すると自動削除されませんが、memcachedのようにキャッシュで動いている場合は、キャッシュの容量によって自動削除されることもあります。
<bytes>は以下の<data>で指定するデータのサイズです。例えば”abcde”と5文字を格納する場合は、5と指定します。
<data>は格納するデータです。実装によっても異なりますが、最大長は約1MBytesとなります。
データの取得・削除を行うコマンド(get,delete)は、以下のような文法となり、引数に対象のキー名を指定します。

<コマンド> 値の加減算を行うコマンド(incr,decr)は、以下のような文法となり、引数に対象のキー名と加減算する数値を指定します。
<コマンド> では、これらのコマンドをいくつか実際に試してみます。
========================
telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.

--- set,getコマンド ---
set name 12345 0 6
sakura
STORED
get name
VALUE name 12345 6
sakura
END

--- replaceコマンド ---
replace name 54321 0 6
ohkubo
STORED
get name
VALUE name 54321 6
ohkubo
END

--- appendコマンド ---
append name 0 0 3
123
STORED
get name
VALUE name 54321 9
ohkubo123
END

--- prependコマンド ---
prepend name 0 0 3
123
STORED
get name
VALUE name 54321 12
123ohkubo123
END

--- deleteコマンド ---
delete name
DELETED
get name
END

--- incr,decrコマンド ---
set age 0 0 2
29
STORED
incr age 10
39
decr age 9
30
get age
VALUE age 0 2
30
END

--- statsコマンド ---
stats
STAT pid 35580
STAT uptime 71089
STAT time 1268969708
STAT version 1.4.4
STAT pointer_size 32
STAT rusage_user 0.136690
STAT rusage_system 0.281422
STAT curr_connections 10
STAT total_connections 16
STAT connection_structures 11
STAT cmd_get 29
STAT cmd_set 24
STAT cmd_flush 0
STAT get_hits 22
STAT get_misses 7
STAT delete_misses 1
STAT delete_hits 4
STAT incr_misses 0
STAT incr_hits 3
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 1111
STAT bytes_written 1864
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 54
STAT curr_items 1
STAT total_items 20
STAT evictions 0
END

--- versionコマンド ---
version
VERSION 1.4.4

--- 終了 ---
quit