memcached 資料一覧

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