Blame doc/protocol-binary.xml

Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
Packit 4e8bc4
<rfc category="info" docName="draft-stone-memcache-binary-01" ipr="trust200902">
Packit 4e8bc4
  <front>
Packit 4e8bc4
    <title> Memcache Binary Protocol </title>
Packit 4e8bc4
Packit 4e8bc4
    <author fullname="Aaron Stone" surname="Stone" role="editor">
Packit 4e8bc4
      <organization>Six Apart, Ltd.</organization>
Packit 4e8bc4
      <address>
Packit 4e8bc4
        <postal>
Packit 4e8bc4
          <street>548 4th Street</street>
Packit 4e8bc4
          <city>San Francisco</city>
Packit 4e8bc4
          <region>CA</region>
Packit 4e8bc4
          94107
Packit 4e8bc4
          <country>USA</country>
Packit 4e8bc4
        </postal>
Packit 4e8bc4
        <email>aaron@serendipity.palo-alto.ca.us</email>
Packit 4e8bc4
      </address>
Packit 4e8bc4
    </author>
Packit 4e8bc4
    <author fullname="Trond Norbye" surname="Norbye" role="editor">
Packit 4e8bc4
      <organization>Sun Microsystems, INC</organization>
Packit 4e8bc4
      <address>
Packit 4e8bc4
        <postal>
Packit 4e8bc4
          <street>Haakon VII g. 7B</street>
Packit 4e8bc4
          <city>Trondheim</city>
Packit 4e8bc4
          NO-7485 Trondheim
Packit 4e8bc4
          <country>Norway</country>
Packit 4e8bc4
        </postal>
Packit 4e8bc4
        <email>trond.norbye@sun.com</email>
Packit 4e8bc4
      </address>
Packit 4e8bc4
    </author>
Packit 4e8bc4
    <date day="28" month="August" year="2008" />
Packit 4e8bc4
    <area>Applications</area>
Packit 4e8bc4
    <keyword>memcache memcached cache</keyword>
Packit 4e8bc4
    <abstract>
Packit 4e8bc4
      <t>
Packit 4e8bc4
        This memo explains the memcache binary protocol for informational
Packit 4e8bc4
        purposes.
Packit 4e8bc4
      </t>
Packit 4e8bc4
      <t>
Packit 4e8bc4
        Memcache is a high performance key-value cache. It is intentionally a
Packit 4e8bc4
        dumb cache, optimized for speed only. Applications using memcache do
Packit 4e8bc4
        not rely on it for data -- a persistent database with guaranteed
Packit 4e8bc4
        reliability is strongly recommended -- but applications can run much
Packit 4e8bc4
        faster when cached data is available in memcache.
Packit 4e8bc4
      </t>
Packit 4e8bc4
    </abstract>
Packit 4e8bc4
  </front>
Packit 4e8bc4
Packit 4e8bc4
  <middle>
Packit 4e8bc4
    <section anchor="introduction" title="Introduction">
Packit 4e8bc4
      <t>
Packit 4e8bc4
        Memcache is a high performance key-value cache. It is intentionally a
Packit 4e8bc4
        dumb cache, optimized for speed only. Applications using memcache should
Packit 4e8bc4
        not rely on it for data -- a persistent database with guaranteed
Packit 4e8bc4
        reliability is strongly recommended -- but applications can run much
Packit 4e8bc4
        faster when cached data is available in memcache.
Packit 4e8bc4
      </t>
Packit 4e8bc4
      <t>
Packit 4e8bc4
        Memcache was originally written to make
Packit 4e8bc4
        <xref target="LJ">LiveJournal</xref> faster. It now powers all of
Packit 4e8bc4
        the fastest web sites that you love.
Packit 4e8bc4
      </t>
Packit 4e8bc4
      <section anchor="conventions" title="Conventions Used In This Document">
Packit 4e8bc4
        <t>
Packit 4e8bc4
          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
Packit 4e8bc4
          "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
Packit 4e8bc4
          document are to be interpreted as described in
Packit 4e8bc4
          <xref target="KEYWORDS"/>.
Packit 4e8bc4
        </t>
Packit 4e8bc4
      </section>
Packit 4e8bc4
    </section>
Packit 4e8bc4
Packit 4e8bc4
    <section anchor="packet" title="Packet Structure">
Packit 4e8bc4
      <figure>
Packit 4e8bc4
        <preamble>General format of a packet:</preamble>
Packit 4e8bc4
        <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0/ HEADER                                                        /
Packit 4e8bc4
    /                                                               /
Packit 4e8bc4
    /                                                               /
Packit 4e8bc4
    /                                                               /
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24/ COMMAND-SPECIFIC EXTRAS (as needed)                           /
Packit 4e8bc4
   +/  (note length in the extras length header field)              /
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   m/ Key (as needed)                                               /
Packit 4e8bc4
   +/  (note length in key length header field)                     /
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   n/ Value (as needed)                                             /
Packit 4e8bc4
   +/  (note length is total body length header field, minus        /
Packit 4e8bc4
   +/   sum of the extras and key length body fields)               /
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
        </artwork>
Packit 4e8bc4
      </figure>
Packit 4e8bc4
Packit 4e8bc4
      <figure>
Packit 4e8bc4
        <preamble>Request header:</preamble>
Packit 4e8bc4
        <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Magic         | Opcode        | Key length                    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| Extras length | Data type     | Reserved                      |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| Total body length                                             |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| Opaque                                                        |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| CAS                                                           |
Packit 4e8bc4
    |                                                               |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
        </artwork>
Packit 4e8bc4
      </figure>
Packit 4e8bc4
Packit 4e8bc4
      <figure>
Packit 4e8bc4
        <preamble>Response header:</preamble>
Packit 4e8bc4
        <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Magic         | Opcode        | Key Length                    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| Extras length | Data type     | Status                        |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| Total body length                                             |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| Opaque                                                        |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| CAS                                                           |
Packit 4e8bc4
    |                                                               |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
        </artwork>
Packit 4e8bc4
      </figure>
Packit 4e8bc4
Packit 4e8bc4
      <t>
Packit 4e8bc4
        Header fields:
Packit 4e8bc4
        <list hangIndent="20" style="hanging">
Packit 4e8bc4
          <t hangText="Magic">Magic number.</t>
Packit 4e8bc4
          <t hangText="Opcode">Command code.</t>
Packit 4e8bc4
          <t hangText="Key length">Length in bytes of the text key that follows the command extras.</t>
Packit 4e8bc4
          <t hangText="Status">Status of the response (non-zero on error).</t>
Packit 4e8bc4
          <t hangText="Extras length">Length in bytes of the command extras.</t>
Packit 4e8bc4
          <t hangText="Data type">Reserved for future use (Sean is using this soon).</t>
Packit 4e8bc4
          <t hangText="Reserved">Really reserved for future use (up for grabs).</t>
Packit 4e8bc4
          <t hangText="Total body length">Length in bytes of extra + key + value.</t>
Packit 4e8bc4
          <t hangText="Opaque">Will be copied back to you in the response.</t>
Packit 4e8bc4
          <t hangText="CAS">Data version check.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
      </t>
Packit 4e8bc4
    </section>
Packit 4e8bc4
Packit 4e8bc4
    <section anchor="values" title="Defined Values">
Packit 4e8bc4
      <section anchor="value-magic" title="Magic Byte">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list hangIndent="8" style="hanging">
Packit 4e8bc4
          <t hangText="0x80">Request packet for this protocol version</t>
Packit 4e8bc4
          <t hangText="0x81">Response packet for this protocol version</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          Magic byte / version. For each version of the protocol, we'll use a
Packit 4e8bc4
          different request/response value pair. This is useful for protocol
Packit 4e8bc4
          analyzers to distinguish the nature of the packet from the direction
Packit 4e8bc4
          which it is moving. Note, it is common to run a memcached instance on
Packit 4e8bc4
	  a host that also runs an application server. Such a host will both
Packit 4e8bc4
	  send and receive memcache packets.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          The version should hopefully correspond only to different meanings of
Packit 4e8bc4
          the command byte. In an ideal world, we will not change the header
Packit 4e8bc4
          format. As reserved bytes are given defined meaning, the protocol
Packit 4e8bc4
          version / magic byte values should be incremented.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          Traffic analysis tools are encouraged to identify memcache packets
Packit 4e8bc4
          and provide detailed interpretation if the magic bytes are recognized
Packit 4e8bc4
          and otherwise to provide a generic breakdown of the packet. Note, that
Packit 4e8bc4
          the key and value positions can always be identified even if the magic
Packit 4e8bc4
          byte or command opcode are not recognized.
Packit 4e8bc4
        </t>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="value-status" title="Response Status">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Possible values of this two-byte field:
Packit 4e8bc4
        <list hangIndent="8" style="hanging">
Packit 4e8bc4
          <t hangText="0x0000">No error</t>
Packit 4e8bc4
          <t hangText="0x0001">Key not found</t>
Packit 4e8bc4
          <t hangText="0x0002">Key exists</t>
Packit 4e8bc4
          <t hangText="0x0003">Value too large</t>
Packit 4e8bc4
          <t hangText="0x0004">Invalid arguments</t>
Packit 4e8bc4
          <t hangText="0x0005">Item not stored</t>
Packit 4e8bc4
          <t hangText="0x0006">Incr/Decr on non-numeric value.</t>
Packit 4e8bc4
          <t hangText="0x0081">Unknown command</t>
Packit 4e8bc4
          <t hangText="0x0082">Out of memory</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="value-opcodes" title="Command Opcodes">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Possible values of the one-byte field:
Packit 4e8bc4
        <list hangIndent="8" style="hanging">
Packit 4e8bc4
          <t hangText="0x00">Get</t>
Packit 4e8bc4
          <t hangText="0x01">Set</t>
Packit 4e8bc4
          <t hangText="0x02">Add</t>
Packit 4e8bc4
          <t hangText="0x03">Replace</t>
Packit 4e8bc4
          <t hangText="0x04">Delete</t>
Packit 4e8bc4
          <t hangText="0x05">Increment</t>
Packit 4e8bc4
          <t hangText="0x06">Decrement</t>
Packit 4e8bc4
          <t hangText="0x07">Quit</t>
Packit 4e8bc4
          <t hangText="0x08">Flush</t>
Packit 4e8bc4
          <t hangText="0x09">GetQ</t>
Packit 4e8bc4
          <t hangText="0x0A">No-op</t>
Packit 4e8bc4
          <t hangText="0x0B">Version</t>
Packit 4e8bc4
          <t hangText="0x0C">GetK</t>
Packit 4e8bc4
          <t hangText="0x0D">GetKQ</t>
Packit 4e8bc4
          <t hangText="0x0E">Append</t>
Packit 4e8bc4
          <t hangText="0x0F">Prepend</t>
Packit 4e8bc4
	  <t hangText="0x10">Stat</t>
Packit 4e8bc4
          <t hangText="0x11">SetQ</t>
Packit 4e8bc4
          <t hangText="0x12">AddQ</t>
Packit 4e8bc4
          <t hangText="0x13">ReplaceQ</t>
Packit 4e8bc4
          <t hangText="0x14">DeleteQ</t>
Packit 4e8bc4
          <t hangText="0x15">IncrementQ</t>
Packit 4e8bc4
          <t hangText="0x16">DecrementQ</t>
Packit 4e8bc4
          <t hangText="0x17">QuitQ</t>
Packit 4e8bc4
          <t hangText="0x18">FlushQ</t>
Packit 4e8bc4
          <t hangText="0x19">AppendQ</t>
Packit 4e8bc4
          <t hangText="0x1A">PrependQ</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
	      <t>
Packit 4e8bc4
	        As a convention all of the commands ending with "Q" for
Packit 4e8bc4
	        Quiet.  A quiet version of a command will omit responses
Packit 4e8bc4
	        that are considered uninteresting.  Whether a given response
Packit 4e8bc4
	        is interesting is dependent upon the command.  See the
Packit 4e8bc4
	        descriptions of the
Packit 4e8bc4
	        <xref target="command-get">set commands</xref>
Packit 4e8bc4
	        and <xref target="command-set">set commands</xref> for
Packit 4e8bc4
	        examples of commands that include quiet variants.
Packit 4e8bc4
	      </t>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="value-types" title="Data Types">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Possible values of the one-byte field:
Packit 4e8bc4
        <list hangIndent="8" style="hanging">
Packit 4e8bc4
          <t hangText="0x00">Raw bytes</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
      </section>
Packit 4e8bc4
    </section>
Packit 4e8bc4
Packit 4e8bc4
    <section title="Commands">
Packit 4e8bc4
      <section anchor="command-introduction" title="Introduction">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        All communication is initiated by a request from the client,
Packit 4e8bc4
        and the server will respond to each request with zero or
Packit 4e8bc4
	multiple packets for each request. If the status code of a response
Packit 4e8bc4
	packet is non-nil, the body of the packet will contain a textual error
Packit 4e8bc4
	message. If the status code is nil, the command opcode will define the
Packit 4e8bc4
	layout of the body of the message.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <section anchor="command-introduction-example" title="Example">
Packit 4e8bc4
            <t>
Packit 4e8bc4
                The following figure illustrates the packet layout for
Packit 4e8bc4
                a packet with an error message.
Packit 4e8bc4
            </t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Packet layout:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x01          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x09          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x4e ('N')    | 0x6f ('o')    | 0x74 ('t')    | 0x20 (' ')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x66 ('f')    | 0x6f ('o')    | 0x75 ('u')    | 0x6e ('n')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  32| 0x64 ('d')    |
Packit 4e8bc4
    +---------------+
Packit 4e8bc4
    Total 33 bytes (24 byte header, and 9 bytes value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x00
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0001
Packit 4e8bc4
Total body   (8-11) : 0x00000009
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value        (24-32): The textual string "Not found"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-get" title="Get, Get Quietly, Get Key, Get Key Quietly">
Packit 4e8bc4
        <t>
Packit 4e8bc4
            Request:
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
            Response (if found):
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST have extras.</t>
Packit 4e8bc4
          <t>MAY have key.</t>
Packit 4e8bc4
          <t>MAY have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="symbols">
Packit 4e8bc4
          <t>4 byte flags</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>Extra data for the get commands:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Flags                                                         |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 4 bytes
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          The get command gets a single key. The getq command is both mum
Packit 4e8bc4
          on cache miss and quiet, holding its response until a non-quiet
Packit 4e8bc4
          command is issued. Getk and getkq differs from get and getq by
Packit 4e8bc4
          adding the key into the response packet.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          You're not guaranteed a response to a getq/getkq cache hit until
Packit 4e8bc4
          you send a non-getq/getkq command later, which uncorks the
Packit 4e8bc4
          server and bundles up IOs to send to the client in one go.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          Clients should implement multi-get (still important for
Packit 4e8bc4
          reducing network roundtrips!) as n pipelined requests, the
Packit 4e8bc4
          first n-1 being getq/getkq, the last being a regular
Packit 4e8bc4
          get/getk.  That way you're guaranteed to get a response, and
Packit 4e8bc4
          you know when the server's done.  You can also do the naive
Packit 4e8bc4
          thing and send n pipelined get/getks, but then you could potentially
Packit 4e8bc4
          get back a lot of "NOT_FOUND" error code packets.
Packit 4e8bc4
          Alternatively, you can send 'n' getq/getkqs, followed by a
Packit 4e8bc4
          'noop' command.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <section anchor="command-get-example" title="Example">
Packit 4e8bc4
          <t>
Packit 4e8bc4
           To request the data associated with the key "Hello" the
Packit 4e8bc4
           following fields must be specified in the packet.
Packit 4e8bc4
          </t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>get request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x6f ('o')    |
Packit 4e8bc4
    +---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 29 bytes (24 byte header, and 5 bytes key)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x00
Packit 4e8bc4
Key length   (2,3)  : 0x0005
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000005
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key          (24-29): The textual string: "Hello"
Packit 4e8bc4
Value               : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>If the item exist on the server the following packet is returned,
Packit 4e8bc4
          otherwise a packet with status code != 0 will be returned (see
Packit 4e8bc4
           <xref target="command-introduction">Introduction</xref>)
Packit 4e8bc4
          </t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>get/getq response:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x04          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x09          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x01          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0xde          | 0xad          | 0xbe          | 0xef          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  32| 0x64 ('d')    |
Packit 4e8bc4
    +---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 33 bytes (24 byte header, 4 byte extras and 5 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x00
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x04
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000009
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000001
Packit 4e8bc4
Extras              :
Packit 4e8bc4
  Flags      (24-27): 0xdeadbeef
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value        (28-32): The textual string "World"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>getk/getkq response:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x04          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x09          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x01          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0xde          | 0xad          | 0xbe          | 0xef          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  32| 0x6f ('o')    | 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  36| 0x6c ('l')    | 0x64 ('d')    |
Packit 4e8bc4
    +---------------+---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 38 bytes (24 byte header, 4 byte extras, 5 byte key
Packit 4e8bc4
                    and 5 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x00
Packit 4e8bc4
Key length   (2,3)  : 0x0005
Packit 4e8bc4
Extra length (4)    : 0x04
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x0000000E
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000001
Packit 4e8bc4
Extras              :
Packit 4e8bc4
  Flags      (24-27): 0xdeadbeef
Packit 4e8bc4
Key          (28-32): The textual string: "Hello"
Packit 4e8bc4
Value        (33-37): The textual string: "World"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-set" title="Set, Add, Replace">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST have extras.</t>
Packit 4e8bc4
          <t>MUST have key.</t>
Packit 4e8bc4
          <t>MUST have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="symbols">
Packit 4e8bc4
            <t>4 byte flags</t>
Packit 4e8bc4
            <t>4 byte expiration time</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>Extra data for set/add/replace:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Flags                                                         |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| Expiration                                                    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 8 bytes
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        If the Data Version Check (CAS) is nonzero, the requested
Packit 4e8bc4
        operation MUST only succeed if the item exists and has a CAS value
Packit 4e8bc4
        identical to the provided value.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Add MUST fail if the item already exist.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Replace MUST fail if the item doesn't exist.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Set should store the data unconditionally if the item exists
Packit 4e8bc4
        or not.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          Quiet mutations only return responses on failure.  Success
Packit 4e8bc4
          is considered the general case and is suppressed when in
Packit 4e8bc4
          quiet mode, but errors should not be allowed to go
Packit 4e8bc4
          unnoticed.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <section anchor="command-set-example" title="Example">
Packit 4e8bc4
            <t>The following figure shows an add-command for
Packit 4e8bc4
                <list style="empty">
Packit 4e8bc4
                  <t>Key: "Hello"</t>
Packit 4e8bc4
                  <t>Value: "World"</t>
Packit 4e8bc4
                  <t>Flags: 0xdeadbeef</t>
Packit 4e8bc4
                  <t>Expiry: in two hours</t>
Packit 4e8bc4
                </list>
Packit 4e8bc4
            </t>
Packit 4e8bc4
           <figure>
Packit 4e8bc4
             <preamble>Add request:</preamble>
Packit 4e8bc4
             <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x02          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x08          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x12          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0xde          | 0xad          | 0xbe          | 0xef          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x00          | 0x00          | 0x1c          | 0x20          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  32| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  36| 0x6f ('o')    | 0x57 ('W')    | 0x6f ('o')    | 0x72 ('r')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  40| 0x6c ('l')    | 0x64 ('d')    |
Packit 4e8bc4
    +---------------+---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 42 bytes (24 byte header, 8 byte extras, 5 byte key and
Packit 4e8bc4
                    5 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x02
Packit 4e8bc4
Key length   (2,3)  : 0x0005
Packit 4e8bc4
Extra length (4)    : 0x08
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000012
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              :
Packit 4e8bc4
  Flags      (24-27): 0xdeadbeef
Packit 4e8bc4
  Expiry     (28-31): 0x00001c20
Packit 4e8bc4
Key          (32-36): The textual string "Hello"
Packit 4e8bc4
Value        (37-41): The textual string "World"
Packit 4e8bc4
             </artwork>
Packit 4e8bc4
           </figure>
Packit 4e8bc4
           <t>
Packit 4e8bc4
        The response-packet contains no extra data, and the result of the
Packit 4e8bc4
        operation is signaled through the status code. If the command
Packit 4e8bc4
        succeeds, the CAS value for the item is returned in the CAS-field
Packit 4e8bc4
        of the packet.
Packit 4e8bc4
           </t>
Packit 4e8bc4
           <figure>
Packit 4e8bc4
             <preamble>Successful add response:</preamble>
Packit 4e8bc4
             <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x02          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x01          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x02
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000000
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000001
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : None
Packit 4e8bc4
             </artwork>
Packit 4e8bc4
           </figure>
Packit 4e8bc4
         </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-delete" title="Delete">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
	  Delete the item with the specific key.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <section anchor="command-delete-example" title="Example">
Packit 4e8bc4
          <t>The following figure shows a delete message for the
Packit 4e8bc4
            item "Hello".</t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Delete request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x04          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x6f ('o')    |
Packit 4e8bc4
    +---------------+
Packit 4e8bc4
Packit 4e8bc4
    Total 29 bytes (24 byte header, 5 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x04
Packit 4e8bc4
Key length   (2,3)  : 0x0005
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000005
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : The textual string "Hello"
Packit 4e8bc4
Value               : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
            The response-packet contains no extra data, and the result of the
Packit 4e8bc4
            operation is signaled through the status code.
Packit 4e8bc4
          </t>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-incr" title="Increment, Decrement">
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="empty">
Packit 4e8bc4
            <t>MUST have extras.</t>
Packit 4e8bc4
            <t>MUST have key.</t>
Packit 4e8bc4
            <t>MUST NOT have value.</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="symbols">
Packit 4e8bc4
            <t>8 byte value to add / subtract</t>
Packit 4e8bc4
            <t>8 byte initial value (unsigned)</t>
Packit 4e8bc4
            <t>4 byte expiration time</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>Extra data for incr/decr:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Amount to add                                                 |
Packit 4e8bc4
    |                                                               |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| Initial value                                                 |
Packit 4e8bc4
    |                                                               |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| Expiration                                                    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 20 bytes
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          These commands will either add or remove the specified
Packit 4e8bc4
          amount to the requested counter.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <t>
Packit 4e8bc4
          If the counter does not exist, one of two things may happen:
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="numbers">
Packit 4e8bc4
          <t>If the expiration value is all one-bits (0xffffffff), the
Packit 4e8bc4
             operation will fail with NOT_FOUND.</t>
Packit 4e8bc4
          <t>For all other expiration values, the operation will succeed
Packit 4e8bc4
             by seeding the value for this key with the provided initial
Packit 4e8bc4
             value to expire with the provided expiration time. The flags
Packit 4e8bc4
             will be set to zero.</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>incr/decr response body:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 64-bit unsigned response.                                     |
Packit 4e8bc4
    |                                                               |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 8 bytes
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
        <section anchor="command-incr-example" title="Example">
Packit 4e8bc4
            <t>The following figure shows an incr-command for
Packit 4e8bc4
                <list style="empty">
Packit 4e8bc4
                  <t>Key: "counter"</t>
Packit 4e8bc4
                  <t>Delta: 0x01</t>
Packit 4e8bc4
                  <t>Initial: 0x00</t>
Packit 4e8bc4
                  <t>Expiry: in two hours</t>
Packit 4e8bc4
                </list>
Packit 4e8bc4
            </t>
Packit 4e8bc4
            <figure>
Packit 4e8bc4
              <preamble>Increment request:</preamble>
Packit 4e8bc4
              <artwork>
Packit 4e8bc4
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x05          | 0x00          | 0x07          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x14          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x1b          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x00          | 0x00          | 0x00          | 0x01          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  32| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  36| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  40| 0x00          | 0x00          | 0x1c          | 0x20          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  44| 0x63 ('c')    | 0x6f ('o')    | 0x75 ('u')    | 0x6e ('n')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  48| 0x74 ('t')    | 0x65 ('e')    | 0x72 ('r')    |
Packit 4e8bc4
    +---------------+---------------+---------------+
Packit 4e8bc4
    Total 51 bytes (24 byte header, 20 byte extras, 7 byte key)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x05
Packit 4e8bc4
Key length   (2,3)  : 0x0007
Packit 4e8bc4
Extra length (4)    : 0x14
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x0000001b
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              :
Packit 4e8bc4
  delta      (24-31): 0x0000000000000001
Packit 4e8bc4
  initial    (32-39): 0x0000000000000000
Packit 4e8bc4
  expiration (40-43): 0x00001c20
Packit 4e8bc4
Key                 : Textual string "counter"
Packit 4e8bc4
Value               : None
Packit 4e8bc4
              </artwork>
Packit 4e8bc4
            </figure>
Packit 4e8bc4
            <t>
Packit 4e8bc4
             If the key doesn't exist, the server will respond with the
Packit 4e8bc4
             initial value. If not the incremented value will be returned.
Packit 4e8bc4
             Let's assume that the key didn't exist, so the initial value
Packit 4e8bc4
             is returned.
Packit 4e8bc4
            </t>
Packit 4e8bc4
            <figure>
Packit 4e8bc4
              <preamble>Increment response:</preamble>
Packit 4e8bc4
              <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x05          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x08          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 32 bytes (24 byte header, 8 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x05
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000008
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000005
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : 0x0000000000000000
Packit 4e8bc4
              </artwork>
Packit 4e8bc4
            </figure>
Packit 4e8bc4
          </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-quit" title="quit">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST NOT have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Close the connection to the server.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <section anchor="command-quit-example" title="Example">
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Quit request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x07          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x07
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000000
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
            The response-packet contains no extra data, and the result of the
Packit 4e8bc4
            operation is signaled through the status code. The server will
Packit 4e8bc4
            then close the connection.
Packit 4e8bc4
          </t>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-flush" title="Flush">
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="empty">
Packit 4e8bc4
            <t>MAY have extras.</t>
Packit 4e8bc4
            <t>MUST NOT have key.</t>
Packit 4e8bc4
            <t>MUST NOT have value.</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          <list style="symbols">
Packit 4e8bc4
            <t>4 byte expiration time</t>
Packit 4e8bc4
          </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>Extra data for flush:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| Expiration                                                    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  Total 4 bytes
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
        <t>
Packit 4e8bc4
            Flush the items in the cache now or some time in the future as
Packit 4e8bc4
            specified by the expiration field. See the documentation of the
Packit 4e8bc4
            textual protocol for the full description on how to specify the
Packit 4e8bc4
            expiration time.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <section anchor="command-flush-example" title="Example">
Packit 4e8bc4
        <t>
Packit 4e8bc4
            To flush the cache (delete all items) in two hours, the set
Packit 4e8bc4
            the following values in the request
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <figure>
Packit 4e8bc4
          <preamble>Flush request:</preamble>
Packit 4e8bc4
          <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x08          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x04          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x04          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x00          | 0x00          | 0x1c          | 0x20          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 28 bytes (24 byte header, 4 byte body)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x08
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x04
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000004
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              :
Packit 4e8bc4
   Expiry    (24-27): 0x00001c20
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : None
Packit 4e8bc4
          </artwork>
Packit 4e8bc4
        </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
            The response-packet contains no extra data, and the result of the
Packit 4e8bc4
            operation is signaled through the status code.
Packit 4e8bc4
          </t>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
      <section anchor="command-noop" title="noop">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST NOT have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
        Used as a keep alive. Flushes outstanding getq/getkq's.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <section anchor="command-noop-example" title="Example">
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Noop request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x0a          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x0a
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000000
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
            The response-packet contains no extra data, and the result of the
Packit 4e8bc4
            operation is signaled through the status code.
Packit 4e8bc4
          </t>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-version" title="version">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST NOT have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          Request the server version.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <t>
Packit 4e8bc4
	  The server responds with a packet containing the version string
Packit 4e8bc4
	  in the body with the following format: "x.y.z"
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <section anchor="command-version-example" title="Example">
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Version request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x0b          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x0b
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000000
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Version response:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x0b          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x31 ('1')    | 0x2e ('.')    | 0x33 ('3')    | 0x2e ('.')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x31 ('1')    |
Packit 4e8bc4
    +---------------+
Packit 4e8bc4
    Total 29 bytes (24 byte header, 5 byte body)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x0b
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000005
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : Textual string "1.3.1"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-append" title="Append, Prepend">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MUST have key.</t>
Packit 4e8bc4
          <t>MUST have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
          These commands will either append or prepend the specified
Packit 4e8bc4
          value to the requested key.
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <section anchor="command-append-example" title="Example">
Packit 4e8bc4
          <t>The following example appends '!' to the 'Hello' key.</t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Append request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x0e          | 0x00          | 0x05          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x06          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x48 ('H')    | 0x65 ('e')    | 0x6c ('l')    | 0x6c ('l')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x6f ('o')    | 0x21 ('!')    |
Packit 4e8bc4
    +---------------+---------------+
Packit 4e8bc4
    Total 30 bytes (24 byte header, 5 byte key, 1 byte value)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x0e
Packit 4e8bc4
Key length   (2,3)  : 0x0005
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000006
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key          (24-28): The textual string "Hello"
Packit 4e8bc4
Value        (29)   : "!"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
            The response-packet contains no extra data, and the result of the
Packit 4e8bc4
            operation is signaled through the status code.
Packit 4e8bc4
          </t>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
Packit 4e8bc4
      <section anchor="command-stat" title="Stat">
Packit 4e8bc4
        <t>
Packit 4e8bc4
        <list style="empty">
Packit 4e8bc4
          <t>MUST NOT have extras.</t>
Packit 4e8bc4
          <t>MAY have key.</t>
Packit 4e8bc4
          <t>MUST NOT have value.</t>
Packit 4e8bc4
        </list>
Packit 4e8bc4
        </t>
Packit 4e8bc4
Packit 4e8bc4
        <t>
Packit 4e8bc4
	  Request server statistics. Without a key specified the server will
Packit 4e8bc4
          respond with a "default" set of statistics information. Each piece
Packit 4e8bc4
          of statistical information is returned in its own packet (key
Packit 4e8bc4
          contains the name of the statistical item and the body contains the
Packit 4e8bc4
          value in ASCII format). The sequence of return packets is terminated
Packit 4e8bc4
          with a packet that contains no key and no value.
Packit 4e8bc4
        </t>
Packit 4e8bc4
        <section anchor="command-stat-example" title="Example">
Packit 4e8bc4
            <t>The following example requests all statistics from the server</t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Stat request:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x80          | 0x10          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
    Total 24 bytes
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x80
Packit 4e8bc4
Opcode       (1)    : 0x10
Packit 4e8bc4
Key length   (2,3)  : 0x0000
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Reserved     (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000000
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : None
Packit 4e8bc4
Value               : None
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
          <t>
Packit 4e8bc4
              The server will send each value in a separate packet with
Packit 4e8bc4
              an "empty" packet (no key / no value) to terminate the sequence.
Packit 4e8bc4
              Each of the response packets look like the following example:
Packit 4e8bc4
         </t>
Packit 4e8bc4
          <figure>
Packit 4e8bc4
            <preamble>Stat response:</preamble>
Packit 4e8bc4
            <artwork>
Packit 4e8bc4
  Byte/     0       |       1       |       2       |       3       |
Packit 4e8bc4
     /              |               |               |               |
Packit 4e8bc4
    |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   0| 0x81          | 0x10          | 0x00          | 0x03          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   4| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
   8| 0x00          | 0x00          | 0x00          | 0x07          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  12| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  16| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  20| 0x00          | 0x00          | 0x00          | 0x00          |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  24| 0x70 ('p')    | 0x69 ('i')    | 0x64 ('d')    | 0x33 ('3')    |
Packit 4e8bc4
    +---------------+---------------+---------------+---------------+
Packit 4e8bc4
  28| 0x30 ('0')    | 0x37 ('7')    | 0x38 ('8')    |
Packit 4e8bc4
    +---------------+---------------+---------------+
Packit 4e8bc4
    Total 31 bytes (24 byte header, 3 byte key, 4 byte body)
Packit 4e8bc4
Packit 4e8bc4
Field        (offset) (value)
Packit 4e8bc4
Magic        (0)    : 0x81
Packit 4e8bc4
Opcode       (1)    : 0x10
Packit 4e8bc4
Key length   (2,3)  : 0x0003
Packit 4e8bc4
Extra length (4)    : 0x00
Packit 4e8bc4
Data type    (5)    : 0x00
Packit 4e8bc4
Status       (6,7)  : 0x0000
Packit 4e8bc4
Total body   (8-11) : 0x00000007
Packit 4e8bc4
Opaque       (12-15): 0x00000000
Packit 4e8bc4
CAS          (16-23): 0x0000000000000000
Packit 4e8bc4
Extras              : None
Packit 4e8bc4
Key                 : The textual string "pid"
Packit 4e8bc4
Value               : The textual string "3078"
Packit 4e8bc4
            </artwork>
Packit 4e8bc4
          </figure>
Packit 4e8bc4
        </section>
Packit 4e8bc4
      </section>
Packit 4e8bc4
    </section>
Packit 4e8bc4
    <section anchor="security" title="Security Considerations">
Packit 4e8bc4
      <t>
Packit 4e8bc4
      Memcache has few authentication and no security layers whatsoever. It is
Packit 4e8bc4
      RECOMMENDED that memcache be deployed strictly on closed, protected,
Packit 4e8bc4
      back-end networks within a single data center, within a single cluster of
Packit 4e8bc4
      servers, or even on a single host, providing shared caching for multiple
Packit 4e8bc4
      applications. Memcache MUST NOT be made available on a public network.
Packit 4e8bc4
      </t>
Packit 4e8bc4
Packit 4e8bc4
      <t>
Packit 4e8bc4
      SASL is supported as an authentication mechanism. See the wiki for more
Packit 4e8bc4
      information.
Packit 4e8bc4
      </t>
Packit 4e8bc4
    </section>
Packit 4e8bc4
Packit 4e8bc4
  </middle>
Packit 4e8bc4
Packit 4e8bc4
  <back>
Packit 4e8bc4
    <references title="Normative References">
Packit 4e8bc4
      <reference anchor="LJ">
Packit 4e8bc4
        <front>
Packit 4e8bc4
          <title>LJ NEEDS MOAR SPEED</title>
Packit 4e8bc4
          <author fullname="Brad Fitzpatrick">
Packit 4e8bc4
            <organization>Danga Interactive</organization>
Packit 4e8bc4
          </author>
Packit 4e8bc4
          <date day="5" month="10" year="1999" />
Packit 4e8bc4
          <abstract>
Packit 4e8bc4
            <t>http://www.livejournal.com/</t>
Packit 4e8bc4
          </abstract>
Packit 4e8bc4
        </front>
Packit 4e8bc4
      </reference>
Packit 4e8bc4
      <dwdrfc-ref anchor="KEYWORDS" src='reference.RFC.2119.xml'/>
Packit 4e8bc4
    </references>
Packit 4e8bc4
Packit 4e8bc4
    <section anchor="acknowledgments" title="Acknowledgments">
Packit 4e8bc4
      <t>
Packit 4e8bc4
      Thanks to Brad Fitzpatrick, Anatoly Vorobey, Steven Grimm, and Dustin
Packit 4e8bc4
      Sallings, for their work on the memcached server.
Packit 4e8bc4
      </t>
Packit 4e8bc4
Packit 4e8bc4
      <t>
Packit 4e8bc4
      Thanks to Sean Chittenden, Jonathan Steinert, Brian Aker, Evan Martin,
Packit 4e8bc4
      Nathan Neulinger, Eric Hodel, Michael Johnson, Paul Querna, Jamie
Packit 4e8bc4
      McCarthy, Philip Neustrom, Andrew O'Brien, Josh Rotenberg, Robin H.
Packit 4e8bc4
      Johnson, Tim Yardley, Paolo Borelli, Eli Bingham, Jean-Francois
Packit 4e8bc4
      Bustarret, Paul G, Paul Lindner, Alan Kasindorf, Chris Goffinet, Tomash
Packit 4e8bc4
      Brechko, and others for their work reporting bugs and maintaining
Packit 4e8bc4
      memcached client libraries and bindings in many languages.
Packit 4e8bc4
      </t>
Packit 4e8bc4
    </section>
Packit 4e8bc4
  </back>
Packit 4e8bc4
Packit 4e8bc4
</rfc>
Packit 4e8bc4