Redis協議規範 RESP

2021-09-08 12:13:24 字數 1185 閱讀 5177

redis 即 remote dictionary server (遠端字典服務);

而redis的協議規範是 redis serialization protocol (redis序列化協議)

該協議是用於與redis伺服器通訊的,用的較多的是redis-cli通過pipe與redis伺服器聯絡;

協議如下:

客戶端以規定格式的形式傳送命令給伺服器;

伺服器在執行最後一條命令後,返回結果。

間隔符號,在linux下是\r\n,在windows下是\n

格式:+ 字串 \r\n

字串不能包含 cr或者 lf(不允許換行)

eg: "+ok\r\n"

格式:- 錯誤字首 錯誤資訊 \r\n

錯誤資訊不能包含 cr或者 lf(不允許換行),errors與****** strings很相似,不同的是erros會被當作異常來看待

eg: "-error unknow command 'foobar'\r\n"

格式:: 數字 \r\n

eg: ":1000\r\n"

格式:$ 字串的長度 \r\n 字串 \r\n

字串不能包含 cr或者 lf(不允許換行);

eg: "$6\r\nfoobar\r\n"    其中字串為 foobar,而6就是foobar的字元長度

"$0\r\n\r\n"       空字串

"$-1\r\n"           null

格式:* 陣列元素個數 \r\n 其他所有型別 (結尾不需要\r\n)

注意:只有元素個數後面的\r\n是屬於該陣列的,結尾的\r\n一般是元素的

eg: "*0\r\n"      空陣列

"*2\r\n$2\r\nfoo\r\n$3\r\nbar\r\n"      陣列包含2個元素,分別是字串foo和bar

"*3\r\n:1\r\n:2\r\n:3\r\n"       陣列包含3個整數:1、2、3

"*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$6\r\nfoobar\r\n"  包含混合型別的陣列

"*-1\r\n"         null陣列

"*2\r\n

*3\r\n:1\r\n:2\r\n:3\r\n

*2\r\n+foo\r\n-bar\r\n"

redis系列6 RESP協議

redis原生的api,如果要傳送n個命令,需要傳送n個請求。這種比較耗費網路連線,我們可以借用redis提供的pipeline管道一次傳送多個命令執行。pipeline管理實際上就是基於resp協議。resp redis serialization protocal 全稱是redis序列化協議。r...

Redis 協議規範

3.如何快速插入億級的鍵值對 4.碎碎念 5.參考資料 偶然間跟同事討論起 redis 的 client 和 server 之間傳輸資料的協議是什麼樣子的,以set hello world為例 我 set hello 5 r nworld r n 同事 z 3 r n 3 r nset r n 5 ...

Redis原始碼研究 Redis的RESP協議

redis客戶端和服務端互動使用的是redis作者制定的乙個協議,叫resp redis serialization protocol 具體分如下幾個層次 客戶端發給服務端的命令都會序列化為array,而服務端返回給客戶端的可以為如上任意一種型別,各簡單舉例如下 具體介紹參考 請求響應模式有兩種特殊...