溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解Redis通訊協(xié)議RESP

發(fā)布時間:2021-11-23 16:27:55 來源:億速云 閱讀:106 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何理解Redis通訊協(xié)議RESP,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Redis的作者認為數(shù)據(jù)庫系統(tǒng)的瓶頸一般不在于網(wǎng)絡(luò)流量,而是數(shù)據(jù)庫自身內(nèi)部邏輯處理上。所以即使Redis使用了浪費流量的文本協(xié)議,依然可以取得極高的訪問性能。Redis將所有數(shù)據(jù)都放在內(nèi)存,用一個單線程對外提供服務(wù),單個節(jié)點在跑滿一個CPU核心的情況下可以達到了10w/s的超高QPS。

RESP(  Re  dis  S  erialization  P  rotocol)

RESP是Redis序列化協(xié)議的簡寫。它是一種直觀的文本協(xié)議,優(yōu)勢在于實現(xiàn)異常簡單,解析性能極好。Redis協(xié)議將傳輸?shù)慕Y(jié)構(gòu)數(shù)據(jù)分為5種最小單元類型,單元結(jié)束時統(tǒng)一加上回車換行符號\r\n。

  1. 單行字符串 以 + 符號開頭。

  2. 多行字符串 以 $ 符號開頭,后跟字符串長度。

  3. 整數(shù)值 以 : 符號開頭,后跟整數(shù)的字符串形式。

  4. 錯誤消息 以 - 符號開頭。

  5. 數(shù)組 以 * 號開頭,后跟數(shù)組的長度。

單行字符串

#單行字符串hello world+hello world\r\n

多行字符串

#多行字符串 hello world 。多行字符串當然也可以表示單行字符串。$11\r\nhello world\r\n

整數(shù)

#整數(shù) 1024:1024\r\n

錯誤消息

#錯誤參數(shù)類型錯誤-WRONGTYPE Operation against a key holding the wrong kind of value

數(shù)組

#數(shù)組 [1,2,3]*3\r\n:1\r\n:2\r\n:3\r\n

注意點:

NULL:用多行字符串表示,不過長度要寫成-1。

$-1\r\n

空串:用多行字符串表示,長度填0。

$0\r\n\r\n

注意這里有兩個\r\n。為什么是兩個? 因為兩個\r\n之間隔的是空串。

客戶端請求指令

客戶端向服務(wù)器發(fā)送的指令只有一種格式,多行字符串數(shù)組。

例如:

>set name mango#指令轉(zhuǎn)換*3\r\n$3\r\nset\r\n$4\r\name\r\n$5\r\mango\r\n#在控制臺輸出這個字符串*3$3set$4name$5mango

服務(wù)器響應(yīng)結(jié)果

服務(wù)器向客戶端回復(fù)的響應(yīng)要支持多種數(shù)據(jù)結(jié)構(gòu),所以消息響應(yīng)在結(jié)構(gòu)上要復(fù)雜不少。不過再復(fù)雜的響應(yīng)消息也是以上 5 種基本類型的組合。

單行字符串響應(yīng)

> set name mangoOK#響應(yīng)消息+OK

錯誤響應(yīng)

> incr name(error) ERR value is not an integer or out of range#響應(yīng)消息-ERR value is not an integer or out of range

整數(shù)類型響應(yīng)

> incr number(integer) 1#響應(yīng)消息:1

多行字符串響應(yīng)

> get name"mango"#響應(yīng)消息 這里使用雙引號括起來的字符串就是多行字符串響應(yīng)$5mango

數(shù)組響應(yīng)

> hset user name mango(integer) 1> hset user age 18(integer) 1> hgetall user1) "name"2) "mango"3) "age"4) "18"#響應(yīng)信息*4$4name$5mango$3age$218

嵌套

> scan 0 match name* count 101) "0"2) 1) "name1"2) "name2"#響應(yīng)信息*2$10*2$5name1$5name2

Redis協(xié)議里有大量冗余的回車換行符,但是這不影響它成為互聯(lián)網(wǎng)技術(shù)領(lǐng)域非常受歡迎的一個文本協(xié)議。有很多開源項目使用RESP作為它的通訊協(xié)議。在技術(shù)領(lǐng)域性能并不總是一切,還有簡單性、易理解性和易實現(xiàn)性,這些都需要進行適當權(quán)衡。

上述內(nèi)容就是如何理解Redis通訊協(xié)議RESP,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI