Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


16.6.3.9 memcached の TCP テキストプロトコルの使用

memcached サーバーとの通信は、TCP または UDP プロトコルを介して実現されます。TCP プロトコルを使用すると、単純なテキストベースのインタフェースを使用して情報を交換できます。

memcached と通信するときは、サーバー用に構成されたポートを使用するとサーバーに接続できます。サーバーとの接続を開くときに、認証やログインは必要ありません。接続した直後から、サーバーへのコマンド送信を開始できます。完了したときは、特別な切断コマンドを送信せずに接続を終了できます。クライアントは、待機時間を短縮し、パフォーマンスを向上させるため、接続を開いたままにすることが推奨されます。

データは 2 つの形式で memcached サーバーに送信されます。

  • サーバーにコマンドを送信し、サーバーから応答を受信するために使用されるテキスト行。

  • 特定のキーに対する値の情報を送受信するために使用される非構造化データ。データは受信したときと同じフォーマットでクライアントに返されます。

テキスト行 (コマンドと応答) および非構造化データは、どちらも常に文字列 \r\n で終了します。格納されるデータにこのシーケンスが含まれている可能性があるため、(非構造化データが送信される前にクライアントから返される) データの長さを使用してデータの末尾が特定されるはずです。

サーバーに対するコマンドは、操作に応じて構造化されています。

  • ストレージコマンド: setaddreplaceappendprependcas

    サーバーに対するストレージコマンドは、次の形式を取ります。

    command key [flags] [exptime] length [noreply]

    または、コンペアアンドスワップ (CAS) を使用する場合:

    cas key [flags] [exptime] length [casunique] [noreply]

    ここでは:

    • command: コマンド名。

      • set: キーに対する値を格納します

      • add: キーがまだ存在しない場合に、そのキーに対してこの値を格納します

      • replace: キーがすでに存在する場合に、そのキーに対してこのキーを格納します

      • append: 指定されたキー値の末尾に指定された値を追加します。flags および exptime 引数は使用しないでください。

      • prepend: 指定されたキーの指定された値の末尾にキャッシュ内の現在の値を追加します。flags および exptime 引数は使用しないでください。

      • cas: 指定された casunique が一致する場合にのみ、指定されたキーを指定された値に設定します。これは、自分が情報を最後にフェッチして以降どのユーザーもその情報を更新していない場合に、その情報を変更するのと実質的に同等です。

    • key: キー。すべてのデータは特定のキーを使用して格納されます。キーに制御文字および空白文字を含めることはできません。キーの最大サイズは 250 文字です。

    • flags: 操作のフラグ (整数)。memcached のフラグは透過的です。memcached サーバーはフラグの内容を無視します。これらは、クライアントが情報のタイプを示すために使用します。memcached 1.2.0 以前では、この値は 16 ビット整数値です。memcached 1.2.1 以降では、この値は 32 ビット整数です。

    • exptime: 失効時間 (失効がない場合は 0)。

    • length: 指定された値ブロックの長さ (バイト単位、終端の \r\n 文字を除く)。

    • casunique: 既存エントリの一意の 64 ビット値。これは、既存の値と比較するために使用されます。cas 更新を発行するときに、gets コマンドから返された値を使用します。

    • noreply: コマンドに応答しないようにサーバーに指示します。

    たとえば、値 abcdef をキー xyzkey に格納するには、次を使用します。

    set xyzkey 0 0 6\r\nabcdef\r\n

    サーバーからの戻り値は、ステータスまたはエラー情報を示す 1 行です。詳細については、表16.3「memcached プロトコルの応答」を参照してください。

  • 取得コマンド: getgets

    取得コマンドは次の形式を取ります。

    get key1 [key2 .... keyn]
    gets key1 [key2 ... keyn]

    要求する各キーを空白文字で区切って、複数のキーをコマンドに指定できます。

    サーバーは、次の形式の情報行で応答します。

    VALUE key flags bytes [casunique]

    ここでは:

    • key: キー名。

    • flags: 値を格納したときに memcached サーバーに提供されたフラグ整数の値。

    • bytes: 格納されている値のサイズ (終端の \r\n 文字シーケンスを除く)。

    • casunique: 項目を識別する一意の 64 ビット整数。

    情報行の直後に値のデータブロックが続きます。例:

    get xyzkey\r\n
    VALUE xyzkey 0 6\r\n
    abcdef\r\n

    複数のキーを要求した場合は、見つかったキーごとに情報行とデータブロックが返されます。要求されたキーがキャッシュに存在しない場合、情報は返されません。

  • 削除コマンド: delete

    削除コマンドは次の形式を取ります。

    delete key [time] [noreply]

    ここでは:

    • key: キー名。

    • time: クライアントがサーバーにこのキーの add または replace コマンドを拒否するように求める秒単位の時間 (または特定の Unix 時間)。この期間中は、すべての addreplaceget、および gets コマンドが失敗します。set 操作は成功します。この期間が過ぎると、そのキーは永続的に削除され、すべてのコマンドが許可されます。

      指定しなかった場合、この値は 0 (ただちに削除) とみなされます。

    • noreply: コマンドに応答しないようにサーバーに指示します。

    このコマンドに対する応答は、キーが正常に削除されたことを示す DELETED か、指定されたキーが見つからなかったことを示す NOT_FOUND のいずれかです。

  • 増分/減分: incrdecr

    増分および減分コマンドは、個別の取得/設定シーケンスを実行せずにサーバー内のキーの値を変更します。これらの操作は、現在格納されている値が 64 ビット整数であることを前提としています。格納されている値が 64 ビット整数でない場合は、増分または減分操作を適用する前にその値が 0 とみなされます。

    増分および減分コマンドは次の形式を取ります。

    incr key value [noreply]
    decr key value [noreply]

    ここでは:

    • key: キー名。

    • value: 増分または減分値として使用される整数。

    • noreply: コマンドに応答しないようにサーバーに指示します。

    応答は次のとおりです。

    • NOT_FOUND: 指定されたキーが見つかりませんでした。

    • value: 指定されたキーに関連付けられた新しい値。

    値は符号なしとみなされます。decr 操作では、値が 0 未満に減分されることはありません。incr 操作では、64 ビットの最大値で値が折り返します。

  • 統計コマンド: stats

    stats コマンドは、memcached インスタンスの現在のステータスとそこに格納されているデータに関する詳細な統計情報を提供します。

    統計コマンドは次の形式を取ります。

    STAT [name] [value]

    ここでは:

    • name: 返される統計の名前 (オプション)。指定しなかった場合は、一般統計が返されます。

    • value: 特定の統計操作を実行するときに使用される特定の値。

    戻り値は、次のようにフォーマットされた統計データのリストです。

    STAT name value

    統計は END という 1 行で終了します。

    詳細については、セクション16.6.4「memcached の統計の取得」を参照してください。

参考のため、サポートされる各種のコマンドとその形式のリストを次に示します。

表 16.2 memcached コマンドのリファレンス

コマンド コマンド形式
set set key flags exptime lengthset key flags exptime length noreply
add add key flags exptime lengthadd key flags exptime length noreply
replace replace key flags exptime lengthreplace key flags exptime length noreply
append append key lengthappend key length noreply
prepend prepend key lengthprepend key length noreply
cas cas key flags exptime length casuniquecas key flags exptime length casunique noreply
get get key1 [key2 ... keyn]
gets
delete delete keydelete key noreplydelete key expirydelete key expiry noreply
incr incr keyincr key noreplyincr key valueincr key value noreply
decr decr keydecr key noreplydecr key valuedecr key value noreply
stat statstat namestat name value

サーバーにコマンドを送信すると、サーバーからの応答は次の表に示すいずれかの設定になります。サーバーからの応答値はすべて \r\n で終了します。

表 16.3 memcached プロトコルの応答

文字列 説明
STORED 値が正常に格納されました。
NOT_STORED 値が格納されませんでしたが、エラーが原因ではありません。値を追加または (存在する場合に) 更新するコマンド (addreplace など)、または項目がすでに削除するように設定されているときのコマンドに対応します。
EXISTS cas コマンドを使用したときに、格納しようとしている項目がすでに存在し、最後のチェック以降に変更されています。
NOT_FOUND 格納、更新、または削除しようとしている項目が存在しないか、すでに削除されています。
ERROR 存在しないコマンド名を送信しました。
CLIENT_ERROR errorstring 入力行にエラーがありました。詳細は errorstring に含まれています。
SERVER_ERROR errorstring サーバーにエラーがあったため、情報を返すことができません。極端な場合には、このエラーの発生後にサーバーがクライアントから切断されることがあります。
VALUE keys flags length 要求されたキーが見つかり、格納されている keyflags、およびデータブロックが指定された length で返されます。
DELETED 要求されたキーがサーバーから削除されました。
STAT name value 統計データの行。
END 統計データの終わり。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.