您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何理解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是Redis序列化協(xié)議的簡寫。它是一種直觀的文本協(xié)議,優(yōu)勢在于實現(xiàn)異常簡單,解析性能極好。Redis協(xié)議將傳輸?shù)慕Y(jié)構(gòu)數(shù)據(jù)分為5種最小單元類型,單元結(jié)束時統(tǒng)一加上回車換行符號\r\n。
單行字符串 以 + 符號開頭。
多行字符串 以 $ 符號開頭,后跟字符串長度。
整數(shù)值 以 : 符號開頭,后跟整數(shù)的字符串形式。
錯誤消息 以 - 符號開頭。
數(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è)資訊頻道。
免責聲明:本站發(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)容。