redis系列6 RESP協議

2021-09-20 21:32:27 字數 1122 閱讀 6888

redis原生的api,如果要傳送n個命令,需要傳送n個請求。這種比較耗費網路連線,我們可以借用redis提供的pipeline管道一次傳送多個命令執行。

pipeline管理實際上就是基於resp協議。

resp(redis serialization protocal)全稱是redis序列化協議。redis的請求基本都是命令+引數,所以可以將多個命令按照resp協議進行組合,一起傳送。

resp協議支援5種資料型別:簡單字串(****** strings)、錯誤資料(errors)、整數(integers)、批量字串(bulk strings)、陣列(arrays);客戶端請求伺服器時,會以批量資料型別的陣列進行請求封裝;服務端傳送響應給客戶端時,根據命令實現的不同,返回相應的資料型別。不同的資料型別根據請求/響應報文的第乙個位元組進行區分。

(1)簡單字串型別(****** strings)

以+開頭,後面跟字串,以rn結尾;字串中不能包含r或者n字元。簡單字串型別都是單行資料。

"+ok\r\n"
(2)錯誤型別(errors)

類似於簡單字串,錯誤型別用於返回錯誤訊息給客戶端,錯誤型別以-開頭。

"-error message\r\n"
(3)整型

以:開頭,以rn結尾,中間的字串都由整數組成

:10\r\
(4)批量字串型別(bulk strings)

批量字串型別,用於表示二進位制安全的字串,最大長度支援512mb。格式如下:以$開頭,緊接著是乙個用於標識包含傳輸字串位元組個數的數字,以rn結尾;待傳輸的字串資料;以rn結尾標識訊息的結束;

"$6\r\aaa\r\n"
(5)陣列型別(arrays)

以*開頭,隨後跟乙個用於標識陣列元素數量的實數,以rn結尾;跟隨多個陣列元素,每個陣列元素都是resp中的一種資料型別;陣列型別可以不同;

這個不舉例了。

按照上述協議,一條set命令set key value,按照resp協議轉換為"*3\r\n$3\r\nset\r\n$3\r\n\key\r\n$5\r\nvalue\r\n"。所以可以將多條命令組合後一次性傳送執行。

Redis協議規範 RESP

redis 即 remote dictionary server 遠端字典服務 而redis的協議規範是 redis serialization protocol redis序列化協議 該協議是用於與redis伺服器通訊的,用的較多的是redis cli通過pipe與redis伺服器聯絡 協議如下 ...

為什麼 Redis 6 只支援 RESP3 ?

redis 5 發布幾周後,我開始著手實現 resp3,經過幾天的工作,可以實現這一目標了。resp3 是 redis 將從 redis 6 開始使用的新的客戶端 伺服器協議,上的規範清楚地說明我們舊協議 resp2 的這種演進可以如何改進 redis 生態系統,其中最重要的是,resp3 比 re...

Docker系列之實戰 6 安裝Redis

root centos181001 cat etc centos release centos linux release 7.6.1810 core root centos181001 docker v docker version 18.09.1,build 4c52b90 搜尋映象 docke...