redis 6 通信协议RESP

###简介
redis的通信协议是Redis Serialization Protocol,简称RESP,有如下特性:

是二进制安全的
使用TCP
基于请求-响应的模式

需注意的是:RESP是redis客户端和服务端通信的协议,节点交互不使用这个协议。

###RESP描述
RESP有五种最小的单元类型,单元结束时统一加上回车换行符号\r\n。

单行字符串 以 + 符号开头。
多行字符串 以 $ 符号开头,后跟字符串长度。
整数值 以 : 符号开头,后跟整数的字符串形式。
错误消息 以 - 符号开头。
数组 以 * 号开头,后跟数组的长度。

如:
单行字符串

+hello world\r\n

错误消息

-WRONGTYPE Operation against a key holding the wrong kind of value\r\n

整数值

:1024\r\n

多行字符串

$11\r\nhello world\r\n

数组[1,2,3]

*3\r\n:1\r\n:2\r\n:3\r\n

###客户端->服务端
客户端向服务器发送的指令只有一种格式,多行字符串数组
比如一个简单的 set 指令set author codehole会被序列化成下面的字符串。

*3\r\n$3\r\nset\r\n$6\r\nauthor\r\n$8\r\ncodehole\r\n

###服务器 -> 客户端
服务器向客户端回复的响应支持多种数据结构,即以上 5 中基本类型的组合。

###抓包看看
我们用wireshark来抓下包,看看实际的RESP。
在redis上增加个key

127.0.0.1:6379> set hi 'hello world'
OK

1. 客户端发送给服务端

看data段的数据,整个数据结构是RESP的多行字符串结构,以*3开头,后面两个字节是0d,0a,对应ASCII是回车键和换行键,即\r和\n,后面的结构都符合多行字符串结构。
2. 服务端发送给客户端

服务端返回的是ok,结构是单行字符串的,即

+ok\r\n

感兴趣的话,可以再抓抓其他的数据结构。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值