中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Redis中RESP協議的作用是什么

發布時間:2021-06-22 15:42:15 來源:億速云 閱讀:162 作者:Leah 欄目:大數據

Redis中RESP協議的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

簡介

Redis 的客戶端和服務端之間采取了一種獨立的名為 RESP(REdis Serialization Protocol) 的協議,作者主要考慮了以下幾個點:

  • 容易實現

  • 解析快

  • 人類可讀

注意:RESP 雖然是為 Redis 設計的,但是同樣也可以用于其他 C/S 的軟件。

數據類型及示例

RESP 主要可以序列化以下幾種類型:整數,單行回復(簡單字符串),數組,錯誤信息,多行字符串。Redis 客戶端向服務端發送的是一組由執行的命令組成的字符串數組,服務端根據不同的命令回復不同類型的數據,但協議的每部分都是以 “\r\n” (CRLF) 結尾的。另外 RESP 是二進制安全的,不需要處理從一個進程到另一個進程的傳輸,因為它使用了前綴長度進行傳輸。

在 RESP 中, 一些數據的類型通過它的第一個字節進行判斷:

  • 單行回復:回復的第一個字節是 “+”

  • 錯誤信息:回復的第一個字節是 “-“

  • 整形數字:回復的第一個字節是 “:”

  • 多行字符串:回復的第一個字節是 “$“

  • 數組:回復的第一個字節是 “*”

單行回復

以 “+” 開頭,以 “\r\n” 結尾的字符串形式。e.g.

+OK\r\n

響應的客戶端庫,應該返回除 “+” 和 CRLF 以外的內容,例如上面的內容,則返回 “OK”. e.g.

127.0.0.1:6379> set name TaoBeier
+OK\r\n  # 服務端實際返回
---
OK   # redis-cli 客戶端顯示

錯誤信息

錯誤信息和單行回復很像,不過是把 “+” 替換成了 “-“。而這兩者之間真正的區別是,錯誤信息會被客戶端視為異常,并且組成錯誤類型的是錯誤消息本身。e.g.

-Error message\r\n

錯誤信息只在有錯誤發生的時候才會發送,比如數據類型錯誤,語法錯誤,或者命令不存在之類的。而當接收到錯誤信息的時候,客戶端庫應該拋出一個異常。e.g.

127.0.0.1:6379> TaoBeier
-ERR unknown command 'TaoBeier'\r\n  # 服務端實際返回, 下同
---
(error) ERR unknown command 'TaoBeier'  # redis-cli 客戶端顯示, 下同

127.0.0.1:6379> set name TaoBeier moelove
-ERR syntax error\r\n
---
(error) ERR syntax error

整數

這種類型只是只是使用以 “:” 作為前綴,以CRLF作為結尾的字符串來表示整數。e.g. “:666\r\n” 或者 “:999\r\n” 這種的都是整數回復。很多命令都會返回整數回復,例如 INCR LLEN LPUSH 之類的命令。但是多數情況下,返回的整數回復并沒有過多實際含義,例如 LPUSH 就只是為了表示插入了幾個值,但也有例如 EXISTS 命令是當結果為 true 的時候返回 1,false 返回 0 . e.g.

127.0.0.1:6379> LPUSH info TaoBeier MoeLove
:2\r\n  # 服務端實際返回, 下同
---
(integer) 2  # redis-cli 客戶端顯示, 下同

127.0.0.1:6379> LLEN info
:2\r\n
---
(integer) 2

127.0.0.1:6379> EXISTS info
:1\r\n
---
(integer) 1

127.0.0.1:6379> DEL info
:1\r\n
---
(integer) 1

127.0.0.1:6379> EXISTS info
:0\r\n
---
(integer) 0

多行字符串

多行字符串被服務端用來返回長度最大為 512MB 的單個二進制安全的字符串。以 “$“ 開頭, 后跟實際要發送的字節數,隨后是 CRLF,然后是實際的字符串數據,最后以 CRLF 結束。所以,例如我們要發送一個 “moelove.info” 的字符串,那它實際就被編碼為 “$12\r\nmoelove.info\r\n”。而如果一個要發送一個空字符串,則會編碼為 “$0\r\n\r\n” 。某些情況下,當要表示不存在的值時候,則以 “$-1\r\n” 返回,這被叫做空多行字符串,當客戶端庫接收到這個響應的時候,同樣應該返回一個空值(例如 nil)而不是一個空字符串。e.g.

127.0.0.1:6379> set site moelove.info
+OK\r\n  # 服務端實際返回, 下同
---
OK   # redis-cli 客戶端顯示, 下同

127.0.0.1:6379> get site
$12\r\nmoelove.info\r\n
---
"moelove.info"

127.0.0.1:6379> del site
:1\r\n
---
(integer) 1

127.0.0.1:6379> get site
$-1\r\n
---
(nil)

127.0.0.1:6379> set site ''
+OK\r\n
---
OK

127.0.0.1:6379> get site
$0\r\n\r\n
---
""

數組

數組類型可用于客戶端向服務端發送命令,同樣的當某些命令將元素結合返回給客戶端的時候,也是使用數組類型作為回復類型的。它以 “*” 開頭,后面跟著返回元素的個數,隨后是 CRLF, 再然后就是數組中各元素自己的類型了。最典型的是 LRRANGE 命令,返回一個列表中的元素。e.g.

127.0.0.1:6379> LPUSH info TaoBeier moelove.info
:2\r\n   # 服務端實際返回, 下同
---
(integer) 2  # redis-cli 客戶端顯示, 下同

127.0.0.1:6379> LRANGE info 0 -1
*2\r\n$12\r\nmoelove.info\r\n$8\r\nTaoBeier\r\n
---
1) "moelove.info"
2) "TaoBeier"

127.0.0.1:6379> LPOP info
$12\r\nmoelove.info\r\n
---
"moelove.info"

127.0.0.1:6379> LPOP info
$8\r\nTaoBeier\r\n
---
"TaoBeier"

127.0.0.1:6379> LRANGE info 0 -1
*0\r\n
---
(empty list or set)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

安福县| 德化县| 彰武县| 垣曲县| 定边县| 长宁县| 门头沟区| 永和县| 鸡泽县| 湘阴县| 临沭县| 合川市| 丹东市| 迁安市| 正蓝旗| 庄浪县| 鸡西市| 桃江县| 长沙市| 高清| 墨脱县| 鄂托克旗| 苍梧县| 九台市| 乐东| 万盛区| 阳山县| 尼玛县| 邹城市| 古蔺县| 大连市| 砚山县| 许昌市| 东乌| 武陟县| 顺昌县| 左云县| 新竹市| 平邑县| 二手房| 滨海县|