Redis通訊協議閱讀
最近要搞搞redis的通訊協議,先閱讀一下官方文件,記錄一下。
應答模型
通常redis收到請求之後會立刻響應,但是有兩種情況屬於例外:
-
使用pipeling的時候
-
使用pub/sub的時候
協議
每次請求的第一個位元組代表著本次請求內容型別:
-
+
代表簡單字串,例如OK
,PING
。 -
-
代表出錯,目前-
後字元一直到空格為止代表錯誤型別,但這並不是此協議的一部分,只是一種偏好。 -
:
代表Integers,例如:1000\r\n
-
$
代表Bulk Strings,例如foobar
將會encode成$6\r\nfoobar\r\n
,而空字串將會encode成$0\r\n\r\n
-
NULL將會表示成
$-1\r\n
-
NULL將會表示成
-
*
代表Array,第一個字元是*
,其後緊接array的資料成員個數,然後接一個\r\n
,接下來就是各成員具體表示。例如返回一個array,其成員為foo
,bar
,將會被encode成:
*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n
- 空陣列將會表示成 `*-1\r\n`
每次請求都需要以\r\n
結尾。