Redis是一個CS架構的軟體,通訊一般分兩步(不包括pipeline和PubSub):
① 客戶端(client)向服務端(server)傳送一條命令
② 服務端解析並執行命令,返回響應結果給客戶端
因此客戶端傳送命令的格式、服務端相應結果的格式必須有一個規範,這個規範就是通訊協議。
而在Redis中採用的是RESP(Redis 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”
- 陣列:首位元組是“*”,後面更上陣列元素個數,再跟上元素,元素資料型別不限:
這是一個傳送set的redis命令