redis自學(24)RESP協議

蓝海的bug本發表於2024-03-25

Redis是一個CS架構的軟體,通訊一般分兩步(不包括pipelinePubSub:

① 客戶端(client)向服務端(server)傳送一條命令

② 服務端解析並執行命令,返回響應結果給客戶端

因此客戶端傳送命令的格式、服務端相應結果的格式必須有一個規範,這個規範就是通訊協議。

而在Redis中採用的是RESPRedis Serialization Protocol)協議:

  • Redis 1.2版本引入了RESP協議
  • Redis 2.0版本中成為與Redis服務端通訊的標準,成為RESP2
  • Redis 6.0版本中,從RESP2升級到了RESP3協議(兩個協議相容性差),增加了更多資料型別並且支援6.0的新特性--客戶端快取

但目前,預設使用的依然是RESP2協議,也就是當前要學習的版本。

RESP協議-資料型別

RESP中,透過首位元組的字元來區分不同資料型別,常用的資料型別包括5種:

  • 單行字串:首位元組是+”,後門跟上單行字串,以CRLF(“\r\n”)結尾。例如返回“OK”:“+OK\r\n(SDS一樣,\r\n不能出現在字串中間,是二進位制不安全的),常見於服務端返回的結果
  • 錯誤(Errors):首位元組是“-”,與單行字串格式一樣,只是字串是異常資訊,例如:“-Error message\r\n”,一般情況下,是服務端響應的結果
  • 數值:首位元組是“:”,後面跟上數字格式的字串,以CRLF結尾。例如“:10\r\n
  • 多行字串:首位元組是$”,表示二進位制安全的字串,最大支援521MB

如果大小為0,則代表空字串:“$0\r\n\r\n

如果大小為-1,則代表不存在:“$-1\r\n

  • 陣列:首位元組是*”,後面更上陣列元素個數,再跟上元素,元素資料型別不限:

這是一個傳送setredis命令

相關文章