Redis 通信协议简单研究

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  #启动的时候指定配置文件

效果图:
redis-server

(3)使用redis-cli 连接redis-server

redis 可以看做是c/s架构的软件,再打开一个终端输入下面的指令

redis-cli -h 192.168.0.102 -p 6379

效果图:
redis-cli
(4)简单的操作一些
操作

keys *  # 查看全部的可以
set demo 123 #设置k-v
TTL demo #查看demo的时间
flushall #清除全部的缓存
quit #退出客户端

3.2 安装wireshark

wireshark是付费的,可以在网上查找体验版(破解版),有条件的建议购买正版。

(1)打开wirshark:
wrieshark

我这个地方选择的Loopback:lo0,因为我redis安装到本地了,实际上redis-server和redis-cli 都在127.0.0.1上,要选择该方式才能时间服务器端和客户端通信。如果我们通过redis-cli连接的是远程服务器上的redis-server,可以选择WI-FI:en0(我这里是这个网卡,可根据自身电脑选择相应的网卡)

(2) 追踪redis-cli 连接到服务时候的通信
我们追踪tcp流
追踪tcp流
得到如下结果
redis-cli.connection
我们得到都是以 *,$,:,+等等来标注的。关于连接的操作太过于复杂,没有做详细的研究,下面看下简单的set指令。
redis-cli.set
可以看出跟我们文章刚开始举得例子一致,redis就是采用这种通信协议来通信的,掌握了redis通信协议,我们可以自己实现一个redis客户端,这都是很简单的。

posted @ 2018-04-22 17:07  nele  阅读(11225)  评论(0编辑  收藏  举报