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,而服務端返回給客戶端的可以為如上任意一種型別,各簡單舉例如下 具體介紹參考 請求響應模式有兩種特殊...