Skip to content

Commit ec9e38c

Browse files
committed
completed 了解 Memcached 二进制协议
1 parent 7e774ce commit ec9e38c

3 files changed

+33
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
了解 Memcached 二进制协议
2+
====
3+
4+
我们说,要实现 Memcached 的 GET, SET, 和 DELETE 操作。我们仅仅关注这些,但 memcached 协议有一个通用的结构,只有少数参数改变为了改变一个请求或响应的意义。这意味着您可以轻松地扩展实现添加其他命令。一般协议有 24 字节头用于请求和响应。这个头可以分解如下表14.1中。
5+
6+
Table 14.1 Sample Memcached header byte structure
7+
8+
Field | Byte offset | Value
9+
------|------|------
10+
Magic | 0 | 0x80 用于请求 0x81 用于响应
11+
OpCode | 1 | 0x01...0x1A
12+
Key length | 2 和 3 | 1...32,767
13+
Extra length | 4 | 0x00, x04, 或 0x08
14+
Data type | 5 | 0x00
15+
Reserved | 6 和 7 | 0x00
16+
所有 body 的长度 | 8-11 | 所有 body 的长度
17+
Opaque | 12-15 | 任何带带符号的 32-bit 整数; 这个已将包含在响应中,因此更容易将请求映射到响应。
18+
CAS | 16-23 | 数据版本检查
19+
20+
注意有多少字节用于每个部分。这告诉你以后你应该用什么数据类型。例如,如果一个字节抵消只使用 byte 0,然后使用一个 Java byte来表示它;如果它使用6和7(2字节),你使用一个Java short;如果它使用 12-15(4字节),你使用一个Java int,等等。
21+
22+
![](../images/Figure 14.2 Real-world Memcached request and response headers.jpg)
23+
24+
1. 请求(只有头显示)
25+
2. 响应
26+
27+
Figure 14.2 Real-world Memcached request and response headers
28+
29+
在图14.2中,高亮显示的第一部分代表请求打到 Memcached (只显示请求头),在这种情况下是告诉 Memcached 来 SET 键是“a”而值是“abc”。第部分是响应。
30+
31+
突出显示的部分中的每一行代表4个字节;因为有6行,这意味着请求头是由24个字节,正如我们之前说的。回顾表14.1中,您可以头文件中看到一个真正的请求的信息。现在,这是所有你需要知道的关于 Memcached 二进制协议。在下一节中,我们需要看看多么我们可以开始制作 Netty 这些请求。
32+

SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ This is the summary of my book.
9494
* [实现自定义的编解码器](ADVANCED TOPICS/Implement a custom codec.md)
9595
* [编解码器的范围](ADVANCED TOPICS/Scope of the codec.md)
9696
* [实现 Memcached 编解码器](ADVANCED TOPICS/Implementing the Memcached codec.md)
97+
* [了解 Memcached 二进制协议](ADVANCED TOPICS/Getting to know the Memcached binary protocol.md)
9798
* [EventLoop 和线程模型](ADVANCED TOPICS/EventLoop and thread model.md)
9899
* [用例1:Droplr Firebase 和 Urban Airship](ADVANCED TOPICS/Droplr Firebase and Urban Airship.md)
99100
* [用例2:Facebook 和 Twitter](ADVANCED TOPICS/Facebook and Twitter.md)
Loading

0 commit comments

Comments
 (0)