1. 程式人生 > >Redis 通信協議簡單研究

Redis 通信協議簡單研究

str 使用命令 mage 緩存 數值 全部 復雜 包括 數字

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客戶端,這都是很簡單的。

Redis 通信協議簡單研究