Netty 了解Memcached二進(jìn)制協(xié)議

2018-08-08 11:02 更新

我們之前說過要實(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

FieldByte offsetValue
Magic00x80 用于請(qǐng)求 0x81 用于響應(yīng)
OpCode10x01...0x1A
Key length2 和 31...32,767
Extra length40x00, x04, 或 0x08
Data type50x00
Reserved6 和 70x00
Total body length8-11所有 body 的長(zhǎng)度
Opaque12-15任何帶帶符號(hào)的 32-bit 整數(shù); 這個(gè)也包含在響應(yīng)中,因此更容易將請(qǐng)求映射到響應(yīng)。
CAS16-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%2014

  1. 請(qǐng)求(只有顯示頭)
  2. 響應(yīng)

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é),正如我們之前說的。回顧表14.1中,您可以頭在一個(gè)真正的請(qǐng)求中看到頭文件中的信息?,F(xiàn)在,這是所有你需要知道的關(guān)于 Memcached 二進(jìn)制協(xié)議。在下一節(jié)中,我們需要看看多么我們可以開始制作 Netty 這些請(qǐng)求。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)