memcached 資料一覧
2008/5/21更新
対応バージョン: 1.2.5
memcachedで使用可能なコマンドには以下の種類がある。
set / get
データの格納 / 取得
gets
データの取得(後述のcas ID付)
replace
既存のデータの変更
append
既存のデータの後ろにデータを追加
prepend
既存のデータの前にデータを追加
cas
キーとcas IDのペアで既存のデータを特定して内容を変更
incr / decr
既存のデータの加算/減算
delete
データの削除
stats
サーバの利用状況のレポート
コマンドは以下のフォーマットで指定する。
set, replace, append, prepend
<コマンド> <キー> <フラグ> <有効期間> <サイズ>
cas
<コマンド> <キー> <フラグ> <有効期間> <サイズ> <cas ID>
incr, decr
<コマンド> <キー> <値>
get, gets, delete
<コマンド> <キー>
stats
引数なし
<フラグ>はデータの圧縮指定で、1:zip圧縮/0:非圧縮のどちらかを指定する。 <有効期間>はUNIXタイムスタンプ形式か現在からの秒数を指定することが可能である。ただし後者の場合は秒数が2592000 = 60 * 60 * 24 * 30 (30日)を超えることはできない。また0を指定すれば有効期限なしの意味になる。 <サイズ>は格納したいデータ長をバイト単位で指定する。以下、それぞれの実行例を示す。
set / get
指定したキーに対してデータを格納/取得する。
例) 「foo」というキーに「123」という3バイトのデータを非圧縮/無期限で格納
set foo 0 0 3 123 => STORED get foo => VALUE foo 0 3 => 123 => END
gets
setで格納したデータを取り出す。
getと似ているが、データの他にcas IDを取得して後述のcasコマンドと合わせて使用する。
gets foo => VALUE foo 0 3 7 (7がcas ID) => 123 => END
replace
既に格納されているデータを書き換える。
replace foo 0 0 3 abc => STORED get foo => VALUE foo 0 3 => abc => END
append
既に格納されているデータの後ろにデータを追加する。
append foo 0 0 3 999 => STORED get foo => VALUE foo 0 6 => abc999 => END
prepend
既に格納されているデータの前にデータを追加する。
prepend foo 0 0 3 111 => STORED get foo => VALUE foo 0 9 => 111abc999 => END
cas
getsでcas ID付で取得したデータに対して更新を行う。
あるキーのデータを書き換えるにはreplaceを使用してもよいが、この方法だと例えばユーザ1があるキーのデータを使用していて処理が終了したら別のデータに書き換えたい場合に途中で他のユーザがそのデータを書き換えてもそれを知るには再度getを行って以前取得したデータと同じかどうかを比較する必要がある。
このような煩雑な作業を避けるためにcasを使用する。
まずgetsでcas ID付のデータを取得しておき、処理終了後にデータを書き換える際にcas IDとともにcasコマンドを使用することにより、もし途中でデータが変わっていたら内部のcas IDも変わっているため更新ができなくなる(EXISTが返る)。
これにより自分が取得したデータに対してのみ書き換え行為が行われるようになり、途中で書き換えたデータが失われることがなくなる。
例) あるユーザがデータを取得してから内容を書き換えるまでに他のユーザによって書き換えられなかった場合
gets foo => VALUE foo 0 3 7 => 123 => END
(なんらかの処理)
cas foo 0 0 3 7 456 => STORED ← cas IDが変わっていないので書き換えは成功する
例) あるユーザがデータを取得してから内容を書き換えるまでの間に別のユーザがデータを書き換えた場合
(ユーザ1がデータを取得)
gets foo => VALUE foo 0 3 8 => 456 => END
(ユーザ2によるデータ書き換え)
replace foo 0 0 3 abc => STORED ← 別ユーザがデータを書き換えた(この時点でcas IDは変わっている)
(ユーザ1によるデータ書き換え)
cas foo 0 0 3 8 zzz => EXISTS ← 既に他のユーザがデータを書き換えたのでzzzは書き込めない get foo => VALUE foo 0 3 => abc ← ユーザ2が書き換えたデータのまま => END
incr / decr
既存のデータの加算/減算を行う。
get foo => VALUE foo 0 3 => 100 => END incr foo 3 => 103 decr foo 5 => 98
delete
指定したキーのデータを削除する。
delete foo => DELETED get foo => END
stats
サーバの利用状況をレポートする。
stats => STAT pid 29456 => STAT uptime 8305 => STAT time 1211193200 => STAT version 1.2.5 => STAT pointer_size 32 => STAT rusage_user 0.001999 => STAT rusage_system 0.004999 => STAT curr_items 2 => STAT total_items 17 => STAT bytes 108 => STAT curr_connections 3 => STAT total_connections 7 => STAT connection_structures 4 => STAT cmd_get 26 => STAT cmd_set 19 => STAT get_hits 22 => STAT get_misses 4 => STAT evictions 0 => STAT bytes_read 820 => STAT bytes_written 902 => STAT limit_maxbytes 67108864 => STAT threads 1 => END