1.Redis網絡通信協議
Redis底層網絡通信協議其實是通過TCP來完成的。
2.Redis通信協議
Redis的通信協議首先是以行來划分,每行以\r\n行結束。每一行都有一個消息頭,消息頭共分為5種分別如下:
(+) 表示一個正確的狀態信息,具體信息是當前行+后面的字符。
(-) 表示一個錯誤信息,具體信息是當前行-后面的字符。
(*) 表示消息體總共有多少行,不包括當前行,*后面是具體的行數。
(\() 表示下一行數據長度,不包括換行符長度\r\n,\)后面則是對應的長度的數據。
(😃 表示返回一個數值,:后面是相應的數字節符。
舉個例子:
*3\r\n #消息一共有三行
$3\r\n #第一行有長度為3
set\r\n #第一行的消息
$4\r\n #第二行長度為4
demo\r\n #第二行的消息
$6\r\n #第三行長度為6
123456\r\n #第三行的消息
+OK\r\n #操作成功
3.使用Wireshark 追蹤Redis通信
本人使用的是mac電腦,以下都是在mac下的操作
3.1安裝redis
(1)直接使用命令安裝
brew install redis
(2)啟動redis-server
redis 默認開啟6379端口
redis-server /usr/local/etc/redis.conf #啟動的時候指定配置文件
效果圖:
(3)使用redis-cli 連接redis-server
redis 可以看做是c/s架構的軟件,再打開一個終端輸入下面的指令
redis-cli -h 192.168.0.102 -p 6379
效果圖:
(4)簡單的操作一些
keys * # 查看全部的可以
set demo 123 #設置k-v
TTL demo #查看demo的時間
flushall #清除全部的緩存
quit #退出客戶端
3.2 安裝wireshark
wireshark是付費的,可以在網上查找體驗版(破解版),有條件的建議購買正版。
(1)打開wirshark:
我這個地方選擇的Loopback:lo0,因為我redis安裝到本地了,實際上redis-server和redis-cli 都在127.0.0.1上,要選擇該方式才能時間服務器端和客戶端通信。如果我們通過redis-cli連接的是遠程服務器上的redis-server,可以選擇WI-FI:en0(我這里是這個網卡,可根據自身電腦選擇相應的網卡)
(2) 追蹤redis-cli 連接到服務時候的通信
我們追蹤tcp流
得到如下結果
我們得到都是以 *,$,:,+等等來標注的。關於連接的操作太過於復雜,沒有做詳細的研究,下面看下簡單的set指令。
可以看出跟我們文章剛開始舉得例子一致,redis就是采用這種通信協議來通信的,掌握了redis通信協議,我們可以自己實現一個redis客戶端,這都是很簡單的。