|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Network Working Group Stone, Ed.
|
|
Packit |
4e8bc4 |
Internet-Draft Six Apart, Ltd.
|
|
Packit |
4e8bc4 |
Intended status: Informational Norbye, Ed.
|
|
Packit |
4e8bc4 |
Expires: March 1, 2009 Sun Microsystems, INC
|
|
Packit |
4e8bc4 |
August 28, 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Memcache Binary Protocol
|
|
Packit |
4e8bc4 |
draft-stone-memcache-binary-01
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Abstract
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
This memo explains the memcache binary protocol for informational
|
|
Packit |
4e8bc4 |
purposes.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Memcache is a high performance key-value cache. It is intentionally
|
|
Packit |
4e8bc4 |
a dumb cache, optimized for speed only. Applications using memcache
|
|
Packit |
4e8bc4 |
do 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 |
|
|
Packit |
4e8bc4 |
Status of This Memo
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
This Internet-Draft is submitted in full conformance with the
|
|
Packit |
4e8bc4 |
provisions of BCP 78 and BCP 79.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Drafts are working documents of the Internet Engineering
|
|
Packit |
4e8bc4 |
Task Force (IETF). Note that other groups may also distribute
|
|
Packit |
4e8bc4 |
working documents as Internet-Drafts. The list of current Internet-
|
|
Packit |
4e8bc4 |
Drafts is at http://datatracker.ietf.org/drafts/current/.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Drafts are draft documents valid for a maximum of six months
|
|
Packit |
4e8bc4 |
and may be updated, replaced, or obsoleted by other documents at any
|
|
Packit |
4e8bc4 |
time. It is inappropriate to use Internet-Drafts as reference
|
|
Packit |
4e8bc4 |
material or to cite them other than as "work in progress."
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
This Internet-Draft will expire on March 1, 2009.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Copyright Notice
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Copyright (c) 2008 IETF Trust and the persons identified as the
|
|
Packit |
4e8bc4 |
document authors. All rights reserved.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
This document is subject to BCP 78 and the IETF Trust's Legal
|
|
Packit |
4e8bc4 |
Provisions Relating to IETF Documents
|
|
Packit |
4e8bc4 |
(http://trustee.ietf.org/license-info) in effect on the date of
|
|
Packit |
4e8bc4 |
publication of this document. Please review these documents
|
|
Packit |
4e8bc4 |
carefully, as they describe your rights and restrictions with respect
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 1]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
to this document. Code Components extracted from this document must
|
|
Packit |
4e8bc4 |
include Simplified BSD License text as described in Section 4.e of
|
|
Packit |
4e8bc4 |
the Trust Legal Provisions and are provided without warranty as
|
|
Packit |
4e8bc4 |
described in the Simplified BSD License.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Table of Contents
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
|
|
Packit |
4e8bc4 |
1.1. Conventions Used In This Document . . . . . . . . . . . . 3
|
|
Packit |
4e8bc4 |
2. Packet Structure . . . . . . . . . . . . . . . . . . . . . . 3
|
|
Packit |
4e8bc4 |
3. Defined Values . . . . . . . . . . . . . . . . . . . . . . . 5
|
|
Packit |
4e8bc4 |
3.1. Magic Byte . . . . . . . . . . . . . . . . . . . . . . . 5
|
|
Packit |
4e8bc4 |
3.2. Response Status . . . . . . . . . . . . . . . . . . . . . 5
|
|
Packit |
4e8bc4 |
3.3. Command Opcodes . . . . . . . . . . . . . . . . . . . . . 6
|
|
Packit |
4e8bc4 |
3.4. Data Types . . . . . . . . . . . . . . . . . . . . . . . 6
|
|
Packit |
4e8bc4 |
4. Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 7
|
|
Packit |
4e8bc4 |
4.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 7
|
|
Packit |
4e8bc4 |
4.1.1. Example . . . . . . . . . . . . . . . . . . . . . . . 7
|
|
Packit |
4e8bc4 |
4.2. Get, Get Quietly, Get Key, Get Key Quietly . . . . . . . 8
|
|
Packit |
4e8bc4 |
4.2.1. Example . . . . . . . . . . . . . . . . . . . . . . . 9
|
|
Packit |
4e8bc4 |
4.3. Set, Add, Replace . . . . . . . . . . . . . . . . . . . . 13
|
|
Packit |
4e8bc4 |
4.3.1. Example . . . . . . . . . . . . . . . . . . . . . . . 13
|
|
Packit |
4e8bc4 |
4.4. Delete . . . . . . . . . . . . . . . . . . . . . . . . . 15
|
|
Packit |
4e8bc4 |
4.4.1. Example . . . . . . . . . . . . . . . . . . . . . . . 16
|
|
Packit |
4e8bc4 |
4.5. Increment, Decrement . . . . . . . . . . . . . . . . . . 17
|
|
Packit |
4e8bc4 |
4.5.1. Example . . . . . . . . . . . . . . . . . . . . . . . 18
|
|
Packit |
4e8bc4 |
4.6. quit . . . . . . . . . . . . . . . . . . . . . . . . . . 20
|
|
Packit |
4e8bc4 |
4.6.1. Example . . . . . . . . . . . . . . . . . . . . . . . 21
|
|
Packit |
4e8bc4 |
4.7. Flush . . . . . . . . . . . . . . . . . . . . . . . . . . 21
|
|
Packit |
4e8bc4 |
4.7.1. Example . . . . . . . . . . . . . . . . . . . . . . . 22
|
|
Packit |
4e8bc4 |
4.8. noop . . . . . . . . . . . . . . . . . . . . . . . . . . 23
|
|
Packit |
4e8bc4 |
4.8.1. Example . . . . . . . . . . . . . . . . . . . . . . . 24
|
|
Packit |
4e8bc4 |
4.9. version . . . . . . . . . . . . . . . . . . . . . . . . . 24
|
|
Packit |
4e8bc4 |
4.9.1. Example . . . . . . . . . . . . . . . . . . . . . . . 25
|
|
Packit |
4e8bc4 |
4.10. Append, Prepend . . . . . . . . . . . . . . . . . . . . . 26
|
|
Packit |
4e8bc4 |
4.10.1. Example . . . . . . . . . . . . . . . . . . . . . . 27
|
|
Packit |
4e8bc4 |
4.11. Stat . . . . . . . . . . . . . . . . . . . . . . . . . . 28
|
|
Packit |
4e8bc4 |
4.11.1. Example . . . . . . . . . . . . . . . . . . . . . . 28
|
|
Packit |
4e8bc4 |
5. Security Considerations . . . . . . . . . . . . . . . . . . . 30
|
|
Packit |
4e8bc4 |
6. Normative References . . . . . . . . . . . . . . . . . . . . 31
|
|
Packit |
4e8bc4 |
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 31
|
|
Packit |
4e8bc4 |
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
1. Introduction
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Memcache is a high performance key-value cache. It is intentionally
|
|
Packit |
4e8bc4 |
a dumb cache, optimized for speed only. Applications using memcache
|
|
Packit |
4e8bc4 |
should not rely on it for data -- a persistent database with
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 2]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
guaranteed reliability is strongly recommended -- but applications
|
|
Packit |
4e8bc4 |
can run much faster when cached data is available in memcache.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Memcache was originally written to make LiveJournal [LJ] faster. It
|
|
Packit |
4e8bc4 |
now powers all of the fastest web sites that you love.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
1.1. Conventions Used In This Document
|
|
Packit |
4e8bc4 |
|
|
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 [KEYWORDS].
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
2. Packet Structure
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
General format of a packet:
|
|
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/ 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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 3]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Request header:
|
|
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| 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 |
|
|
Packit |
4e8bc4 |
Response header:
|
|
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| 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 |
|
|
Packit |
4e8bc4 |
Header fields:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Magic Magic number.
|
|
Packit |
4e8bc4 |
Opcode Command code.
|
|
Packit |
4e8bc4 |
Key length Length in bytes of the text key that follows the
|
|
Packit |
4e8bc4 |
command extras.
|
|
Packit |
4e8bc4 |
Status Status of the response (non-zero on error).
|
|
Packit |
4e8bc4 |
Extras length Length in bytes of the command extras.
|
|
Packit |
4e8bc4 |
Data type Reserved for future use (Sean is using this
|
|
Packit |
4e8bc4 |
soon).
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 4]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Reserved Really reserved for future use (up for grabs).
|
|
Packit |
4e8bc4 |
Total body length Length in bytes of extra + key + value.
|
|
Packit |
4e8bc4 |
Opaque Will be copied back to you in the response.
|
|
Packit |
4e8bc4 |
CAS Data version check.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
3. Defined Values
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
3.1. Magic Byte
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
0x80 Request packet for this protocol version
|
|
Packit |
4e8bc4 |
0x81 Response packet for this protocol version
|
|
Packit |
4e8bc4 |
|
|
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
|
|
Packit |
4e8bc4 |
on a host that also runs an application server. Such a host will
|
|
Packit |
4e8bc4 |
both send and receive memcache packets.
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
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,
|
|
Packit |
4e8bc4 |
that the key and value positions can always be identified even if the
|
|
Packit |
4e8bc4 |
magic byte or command opcode are not recognized.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
3.2. Response Status
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Possible values of this two-byte field:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
0x0000 No error
|
|
Packit |
4e8bc4 |
0x0001 Key not found
|
|
Packit |
4e8bc4 |
0x0002 Key exists
|
|
Packit |
4e8bc4 |
0x0003 Value too large
|
|
Packit |
4e8bc4 |
0x0004 Invalid arguments
|
|
Packit |
4e8bc4 |
0x0005 Item not stored
|
|
Packit |
4e8bc4 |
0x0006 Incr/Decr on non-numeric value.
|
|
Packit |
4e8bc4 |
0x0081 Unknown command
|
|
Packit |
4e8bc4 |
0x0082 Out of memory
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 5]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
3.3. Command Opcodes
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Possible values of the one-byte field:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
0x00 Get
|
|
Packit |
4e8bc4 |
0x01 Set
|
|
Packit |
4e8bc4 |
0x02 Add
|
|
Packit |
4e8bc4 |
0x03 Replace
|
|
Packit |
4e8bc4 |
0x04 Delete
|
|
Packit |
4e8bc4 |
0x05 Increment
|
|
Packit |
4e8bc4 |
0x06 Decrement
|
|
Packit |
4e8bc4 |
0x07 Quit
|
|
Packit |
4e8bc4 |
0x08 Flush
|
|
Packit |
4e8bc4 |
0x09 GetQ
|
|
Packit |
4e8bc4 |
0x0A No-op
|
|
Packit |
4e8bc4 |
0x0B Version
|
|
Packit |
4e8bc4 |
0x0C GetK
|
|
Packit |
4e8bc4 |
0x0D GetKQ
|
|
Packit |
4e8bc4 |
0x0E Append
|
|
Packit |
4e8bc4 |
0x0F Prepend
|
|
Packit |
4e8bc4 |
0x10 Stat
|
|
Packit |
4e8bc4 |
0x11 SetQ
|
|
Packit |
4e8bc4 |
0x12 AddQ
|
|
Packit |
4e8bc4 |
0x13 ReplaceQ
|
|
Packit |
4e8bc4 |
0x14 DeleteQ
|
|
Packit |
4e8bc4 |
0x15 IncrementQ
|
|
Packit |
4e8bc4 |
0x16 DecrementQ
|
|
Packit |
4e8bc4 |
0x17 QuitQ
|
|
Packit |
4e8bc4 |
0x18 FlushQ
|
|
Packit |
4e8bc4 |
0x19 AppendQ
|
|
Packit |
4e8bc4 |
0x1A PrependQ
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
As a convention all of the commands ending with "Q" for Quiet. A
|
|
Packit |
4e8bc4 |
quiet version of a command will omit responses that are considered
|
|
Packit |
4e8bc4 |
uninteresting. Whether a given response is interesting is dependent
|
|
Packit |
4e8bc4 |
upon the command. See the descriptions of the set commands
|
|
Packit |
4e8bc4 |
(Section 4.2) and set commands (Section 4.3) for examples of commands
|
|
Packit |
4e8bc4 |
that include quiet variants.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
3.4. Data Types
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Possible values of the one-byte field:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
0x00 Raw bytes
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 6]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4. Commands
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.1. Introduction
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
All communication is initiated by a request from the client, and the
|
|
Packit |
4e8bc4 |
server will respond to each request with zero or multiple packets for
|
|
Packit |
4e8bc4 |
each request. If the status code of a response packet is non-nil,
|
|
Packit |
4e8bc4 |
the body of the packet will contain a textual error message. If the
|
|
Packit |
4e8bc4 |
status code is nil, the command opcode will define the layout of the
|
|
Packit |
4e8bc4 |
body of the message.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.1.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following figure illustrates the packet layout for a packet with
|
|
Packit |
4e8bc4 |
an error message.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 7]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Packet layout:
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.2. Get, Get Quietly, Get Key, Get Key Quietly
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Request:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 8]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Response (if found):
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST have extras.
|
|
Packit |
4e8bc4 |
MAY have key.
|
|
Packit |
4e8bc4 |
MAY have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
o 4 byte flags
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Extra data for the get commands:
|
|
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| Flags |
|
|
Packit |
4e8bc4 |
+---------------+---------------+---------------+---------------+
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Total 4 bytes
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The get command gets a single key. The getq command is both mum on
|
|
Packit |
4e8bc4 |
cache miss and quiet, holding its response until a non-quiet command
|
|
Packit |
4e8bc4 |
is issued. Getk and getkq differs from get and getq by adding the
|
|
Packit |
4e8bc4 |
key into the response packet.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
You're not guaranteed a response to a getq/getkq cache hit until you
|
|
Packit |
4e8bc4 |
send a non-getq/getkq command later, which uncorks the server and
|
|
Packit |
4e8bc4 |
bundles up IOs to send to the client in one go.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Clients should implement multi-get (still important for reducing
|
|
Packit |
4e8bc4 |
network roundtrips!) as n pipelined requests, the first n-1 being
|
|
Packit |
4e8bc4 |
getq/getkq, the last being a regular get/getk. That way you're
|
|
Packit |
4e8bc4 |
guaranteed to get a response, and you know when the server's done.
|
|
Packit |
4e8bc4 |
You can also do the naive thing and send n pipelined get/getks, but
|
|
Packit |
4e8bc4 |
then you could potentially get back a lot of "NOT_FOUND" error code
|
|
Packit |
4e8bc4 |
packets. Alternatively, you can send 'n' getq/getkqs, followed by a
|
|
Packit |
4e8bc4 |
'noop' command.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.2.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
To request the data associated with the key "Hello" the following
|
|
Packit |
4e8bc4 |
fields must be specified in the packet.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 9]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
get request:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
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 |
Introduction (Section 4.1))
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 10]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
get/getq response:
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 11]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
getk/getkq response:
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 12]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.3. Set, Add, Replace
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST have extras.
|
|
Packit |
4e8bc4 |
MUST have key.
|
|
Packit |
4e8bc4 |
MUST have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
o 4 byte flags
|
|
Packit |
4e8bc4 |
o 4 byte expiration time
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Extra data for set/add/replace:
|
|
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| Flags |
|
|
Packit |
4e8bc4 |
+---------------+---------------+---------------+---------------+
|
|
Packit |
4e8bc4 |
4| Expiration |
|
|
Packit |
4e8bc4 |
+---------------+---------------+---------------+---------------+
|
|
Packit |
4e8bc4 |
Total 8 bytes
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
If the Data Version Check (CAS) is nonzero, the requested operation
|
|
Packit |
4e8bc4 |
MUST only succeed if the item exists and has a CAS value identical to
|
|
Packit |
4e8bc4 |
the provided value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Add MUST fail if the item already exist.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Replace MUST fail if the item doesn't exist.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Set should store the data unconditionally if the item exists or not.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Quiet mutations only return responses on failure. Success is
|
|
Packit |
4e8bc4 |
considered the general case and is suppressed when in quiet mode, but
|
|
Packit |
4e8bc4 |
errors should not be allowed to go unnoticed.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.3.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following figure shows an add-command for
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Key: "Hello"
|
|
Packit |
4e8bc4 |
Value: "World"
|
|
Packit |
4e8bc4 |
Flags: 0xdeadbeef
|
|
Packit |
4e8bc4 |
Expiry: in two hours
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 13]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Add request:
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 14]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
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 of
|
|
Packit |
4e8bc4 |
the packet.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Successful add response:
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.4. Delete
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Delete the item with the specific key.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 15]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.4.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following figure shows a delete message for the item "Hello".
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Delete request:
|
|
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 | 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 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 16]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.5. Increment, Decrement
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST have extras.
|
|
Packit |
4e8bc4 |
MUST have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
o 8 byte value to add / subtract
|
|
Packit |
4e8bc4 |
o 8 byte initial value (unsigned)
|
|
Packit |
4e8bc4 |
o 4 byte expiration time
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Extra data for incr/decr:
|
|
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| 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 |
|
|
Packit |
4e8bc4 |
These commands will either add or remove the specified amount to the
|
|
Packit |
4e8bc4 |
requested counter.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
If the counter does not exist, one of two things may happen:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
1. If the expiration value is all one-bits (0xffffffff), the
|
|
Packit |
4e8bc4 |
operation will fail with NOT_FOUND.
|
|
Packit |
4e8bc4 |
2. For all other expiration values, the operation will succeed by
|
|
Packit |
4e8bc4 |
seeding the value for this key with the provided initial value to
|
|
Packit |
4e8bc4 |
expire with the provided expiration time. The flags will be set
|
|
Packit |
4e8bc4 |
to zero.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
incr/decr response body:
|
|
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| 64-bit unsigned response. |
|
|
Packit |
4e8bc4 |
| |
|
|
Packit |
4e8bc4 |
+---------------+---------------+---------------+---------------+
|
|
Packit |
4e8bc4 |
Total 8 bytes
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 17]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.5.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following figure shows an incr-command for
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Key: "counter"
|
|
Packit |
4e8bc4 |
Delta: 0x01
|
|
Packit |
4e8bc4 |
Initial: 0x00
|
|
Packit |
4e8bc4 |
Expiry: in two hours
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Increment request:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 18]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 19]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
If the key doesn't exist, the server will respond with the initial
|
|
Packit |
4e8bc4 |
value. If not the incremented value will be returned. Let's assume
|
|
Packit |
4e8bc4 |
that the key didn't exist, so the initial value is returned.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Increment response:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
4.6. quit
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST NOT have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 20]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Close the connection to the server.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.6.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Quit request:
|
|
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 | 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 |
|
|
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 then
|
|
Packit |
4e8bc4 |
close the connection.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.7. Flush
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MAY have extras.
|
|
Packit |
4e8bc4 |
MUST NOT have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 21]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
o 4 byte expiration time
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Extra data for flush:
|
|
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| Expiration |
|
|
Packit |
4e8bc4 |
+---------------+---------------+---------------+---------------+
|
|
Packit |
4e8bc4 |
Total 4 bytes
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.7.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
To flush the cache (delete all items) in two hours, the set the
|
|
Packit |
4e8bc4 |
following values in the request
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 22]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Flush request:
|
|
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 | 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 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.8. noop
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST NOT have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Used as a keep alive. Flushes outstanding getq/getkq's.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 23]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.8.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Noop request:
|
|
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 | 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 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.9. version
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST NOT have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Request the server version.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 24]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The server responds with a packet containing the version string in
|
|
Packit |
4e8bc4 |
the body with the following format: "x.y.z"
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.9.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Version request:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 25]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Version response:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
4.10. Append, Prepend
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MUST have key.
|
|
Packit |
4e8bc4 |
MUST have value.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
These commands will either append or prepend the specified value to
|
|
Packit |
4e8bc4 |
the requested key.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 26]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.10.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following example appends '!' to the 'Hello' key.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Append request:
|
|
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 | 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 |
|
|
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 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 27]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
4.11. Stat
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
MUST NOT have extras.
|
|
Packit |
4e8bc4 |
MAY have key.
|
|
Packit |
4e8bc4 |
MUST NOT have value.
|
|
Packit |
4e8bc4 |
|
|
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 |
|
|
Packit |
4e8bc4 |
4.11.1. Example
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
The following example requests all statistics from the server
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 28]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stat request:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
The server will send each value in a separate packet with an "empty"
|
|
Packit |
4e8bc4 |
packet (no key / no value) to terminate the sequence. Each of the
|
|
Packit |
4e8bc4 |
response packets look like the following example:
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 29]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stat response:
|
|
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 | 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 |
|
|
Packit |
4e8bc4 |
5. Security Considerations
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Memcache has few authentication and no security layers whatsoever.
|
|
Packit |
4e8bc4 |
It is RECOMMENDED that memcache be deployed strictly on closed,
|
|
Packit |
4e8bc4 |
protected, back-end networks within a single data center, within a
|
|
Packit |
4e8bc4 |
single cluster of servers, or even on a single host, providing shared
|
|
Packit |
4e8bc4 |
caching for multiple applications. Memcache MUST NOT be made
|
|
Packit |
4e8bc4 |
available on a public network.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 30]
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Internet-Draft Memcache Binary Protocol August 2008
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
SASL is supported as an authentication mechanism. See the wiki for
|
|
Packit |
4e8bc4 |
more information.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
6. Normative References
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
[KEYWORDS]
|
|
Packit |
4e8bc4 |
Bradner, S., "Key words for use in RFCs to Indicate
|
|
Packit |
4e8bc4 |
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
[LJ] Danga Interactive, "LJ NEEDS MOAR SPEED", 10 1999.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Appendix A. Acknowledgments
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Thanks to Brad Fitzpatrick, Anatoly Vorobey, Steven Grimm, and Dustin
|
|
Packit |
4e8bc4 |
Sallings, for their work on the memcached server.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Thanks to Sean Chittenden, Jonathan Steinert, Brian Aker, Evan
|
|
Packit |
4e8bc4 |
Martin, Nathan Neulinger, Eric Hodel, Michael Johnson, Paul Querna,
|
|
Packit |
4e8bc4 |
Jamie McCarthy, Philip Neustrom, Andrew O'Brien, Josh Rotenberg,
|
|
Packit |
4e8bc4 |
Robin H. Johnson, Tim Yardley, Paolo Borelli, Eli Bingham, Jean-
|
|
Packit |
4e8bc4 |
Francois Bustarret, Paul G, Paul Lindner, Alan Kasindorf, Chris
|
|
Packit |
4e8bc4 |
Goffinet, Tomash Brechko, and others for their work reporting bugs
|
|
Packit |
4e8bc4 |
and maintaining memcached client libraries and bindings in many
|
|
Packit |
4e8bc4 |
languages.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Authors' Addresses
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Aaron Stone (editor)
|
|
Packit |
4e8bc4 |
Six Apart, Ltd.
|
|
Packit |
4e8bc4 |
548 4th Street
|
|
Packit |
4e8bc4 |
San Francisco, CA 94107
|
|
Packit |
4e8bc4 |
USA
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Email: aaron@serendipity.palo-alto.ca.us
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Trond Norbye (editor)
|
|
Packit |
4e8bc4 |
Sun Microsystems, INC
|
|
Packit |
4e8bc4 |
Haakon VII g. 7B
|
|
Packit |
4e8bc4 |
Trondheim NO-7485 Trondheim
|
|
Packit |
4e8bc4 |
Norway
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Email: trond.norbye@sun.com
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
Stone & Norbye Expires March 1, 2009 [Page 31]
|