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
keys * # 查看全部的可以
set demo 123 #设置k-v
TTL demo #查看demo的时间
flushall #清除全部的缓存
quit #退出客户端
3.2 安装wireshark
wireshark是付费的,可以在网上查找体验版(破解版),有条件的建议购买正版。
我这个地方选择的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客户端,这都是很简单的。