W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
我們之前說過要實(shí)現(xiàn) Memcached 的 GET,SET,和 DELETE 操作。我們只關(guān)注這些,但是在 memcached 協(xié)議中有一個(gè)通用的結(jié)構(gòu),只有少數(shù)參數(shù)改變?yōu)榱烁淖円粋€(gè)請(qǐng)求或響應(yīng)的意義。這意味著您可以輕松地?cái)U(kuò)展實(shí)現(xiàn)添加其他命令。一般協(xié)議有 24 字節(jié)頭用于請(qǐng)求和響應(yīng)。這個(gè)頭可以分解如下表14.1中。
Table 14.1 Sample Memcached header byte structure
Field | Byte offset | Value |
---|---|---|
Magic | 0 | 0x80 用于請(qǐng)求 0x81 用于響應(yīng) |
OpCode | 1 | 0x01...0x1A |
Key length | 2 和 3 | 1...32,767 |
Extra length | 4 | 0x00, x04, 或 0x08 |
Data type | 5 | 0x00 |
Reserved | 6 和 7 | 0x00 |
Total body length | 8-11 | 所有 body 的長(zhǎng)度 |
Opaque | 12-15 | 任何帶帶符號(hào)的 32-bit 整數(shù); 這個(gè)也包含在響應(yīng)中,因此更容易將請(qǐng)求映射到響應(yīng)。 |
CAS | 16-23 | 數(shù)據(jù)版本檢查 |
注意每個(gè)部分使用的字節(jié)數(shù)。這告訴你接下來你應(yīng)該用什么數(shù)據(jù)類型。例如,如果字節(jié)的偏移量只是 byte 0,那么舊使用一個(gè) Java byte來表示它;如果它是6和7(2字節(jié)),你使用一個(gè)Java short;如果它是 12-15(4字節(jié)),你使用一個(gè)Java int,等等。
Figure 14.2 Real-world Memcached request and response headers
在圖14.2中,高亮顯示的第一部分代表請(qǐng)求打到 Memcached (只顯示請(qǐng)求頭),在這種情況下是告訴 Memcached 來 SET 鍵是“a”而值是“abc”。第部分是響應(yīng)。
突出顯示的部分中的每一行代表4個(gè)字節(jié);因?yàn)橛?行,這意味著請(qǐng)求頭是由24個(gè)字節(jié),正如我們之前說的?;仡櫛?4.1中,您可以頭在一個(gè)真正的請(qǐng)求中看到頭文件中的信息。現(xiàn)在,這是所有你需要知道的關(guān)于 Memcached 二進(jìn)制協(xié)議。在下一節(jié)中,我們需要看看多么我們可以開始制作 Netty 這些請(qǐng)求。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: