Redis 通信协议简单研究

1.Redis网络通信协议

Redis底层网络通信协议其实是通过TCP来完成的。

2.Redis通信协议

Redis的通信协议首先是以行来划分,每行以\r\n行结束。每一行都有一个消息头,消息头共分为5种分别如下:

(+) 表示一个正确的状态信息,具体信息是当前行+后面的字符。

(-) 表示一个错误信息,具体信息是当前行-后面的字符。

(*) 表示消息体总共有多少行,不包括当前行,*后面是具体的行数。

($) 表示下一行数据长度,不包括换行符长度\r\n,$后面则是对应的长度的数据。

(:) 表示返回一个数值,:后面是相应的数字节符。

举个例子:

3.使用Wireshark 追踪Redis通信

本人使用的是mac电脑,以下都是在mac下的操作

3.1安装redis

(1)直接使用命令安装

(2)启动redis-server

redis 默认开启6379端口

效果图:

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

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

效果图:

(4)简单的操作一些

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客户端,这都是很简单的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180422G0TOPT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励