|
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 |
|