redis自学(24)RESP协议
Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub):
① 客户端(client)向服务端(server)发送一条命令
② 服务端解析并执行命令,返回响应结果给客户端
因此客户端发送命令的格式、服务端相应结果的格式必须有一个规范,这个规范就是通讯协议。
而在Redis中采用的是RESP(Redis Serialization Protocol)协议:
- Redis 1.2版本引入了RESP协议
- Redis 2.0版本中成为与Redis服务端通信的标准,成为RESP2
- Redis 6.0版本中,从RESP2升级到了RESP3协议(两个协议兼容性差),增加了更多数据类型并且支持6.0的新特性--客户端缓存
但目前,默认使用的依然是RESP2协议,也就是当前要学习的版本。
RESP协议-数据类型
在RESP中,通过首字节的字符来区分不同数据类型,常用的数据类型包括5种:
- 单行字符串:首字节是“+”,后门跟上单行字符串,以CRLF(“\r\n”)结尾。例如返回“OK”:“+OK\r\n”(和SDS一样,\r\n不能出现在字符串中间,是二进制不安全的),常见于服务端返回的结果
- 错误(Errors):首字节是“-”,与单行字符串格式一样,只是字符串是异常信息,例如:“-Error message\r\n”,一般情况下,是服务端响应的结果
- 数值:首字节是“:”,后面跟上数字格式的字符串,以CRLF结尾。例如“:10\r\n”
- 多行字符串:首字节是“$”,表示二进制安全的字符串,最大支持521MB:
如果大小为0,则代表空字符串:“$0\r\n\r\n”
如果大小为-1,则代表不存在:“$-1\r\n”
- 数组:首字节是“*”,后面更上数组元素个数,再跟上元素,元素数据类型不限:
这是一个发送set的redis命令