aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

Amazon ElastiCache コマンドプロトコル

プロトコル

memcached互換なので、こちら参考。

http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

http://code.google.com/p/memcached/wiki/NewCommands

コマンド種別

  • ストレージコマンド(Storage commands), set,add,replace,append,prepend,cas
  • 検索コマンド(Retrieval commands), get,gets
  • その他のコマンド(delete,incr,decr,stats,flush_all,version,verbosity,quit)

ストレージコマンド

フォーマット

[コマンド名] [キー] [フラグ] [有効期間] [バイト数] [データブロック] \r\n

casコマンドのフォーマット

cas [キー] [フラグ] [有効期間] [バイト数] [cas unique] [データブロック] \r\n

項目詳細

[コマンド名]

set データを保存する。
add 指定されたキーのデータが存在しないときに限り、データを保存する
replace 指定されたキーのデータが存在するときに限り、データを保存(置換)する。
append 指定されたキーのデータの後ろに、指定されたデータを連結して保存する。フラグと有効期限は無視される
prepend 指定されたキーのデータの前に、指定されたデータを連結して保存する。フラグと有効期限は無視される
cas 以前自分がフェッチしてから誰も更新していないことをチェック後にsetの操作を行う。(Check And Set / Compare And Swap)

[フラグ]

16bit符号なし整数。(1.2.1以降は32bitだが、後方互換のために16bitを推奨)。
storeしたフラグは、get/gets時にクライアントに返すので、データのメタ情報として利用可能

[有効期限]

Unix timeか 現在時刻からのオフセットを指定すると、有効期限後には、クライアントがget/getsできないようになる。 0の場合は、evict(LRUで追放されること)されない限り保持し続ける。

[バイト数]

データブロックのバイト数。デリミタ(\r\n)のバイト数を含めないこと。データブロックが空の場合は、0になる。

[cas unique]

ユニークな64bitの値。cas 更新をする際は、クライアントは getsで取得した cas uniqueの値をここで指定する。

レスポンス

STORED\r\n 成功
NOT_STORED\r\n エラーではない。add,replaceで条件に合わなかった場合に出る。
EXISTS\r\n エラー出はない。casでチェックに引っかかった場合に出る。
NOT_FOUND\r\n casで、存在しない or すでにdeleteされた場合に出る

検索コマンド

フォーマット

get [キー]\r\n
gets [キー]\r\n

レスポンス

VALUE [キー] [フラグ] [バイト数] ([cas unique]) \r\n
[データブロック]\r\n

getsの場合は、0回以上、このレスポンスが繰り返される。

削除コマンド

フォーマット

delete [キー] ([時刻]) \r\n

時刻はオプション。無指定の場合はデフォルト値0となる。0の場合は即時削除を意味する。 add/replaceコマンドを拒否する未来時刻(Unix time) or それまでの秒数を指定する。 時刻オプションを指定されたアイテムは削除キューに移され、キューに存在する期間は、add/replaceが拒否されるが、 get/getsはまだ可能。なぜかsetも可能... 時刻に達したアイテムは削除される。

レスポンス

DELETED\r\n
NOT_FOUND\r\n