Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub):
- 客户端(client)向服务端(server)发送一条命令
- 服务端解析并执行命令,返回响应结果给客户端
因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议。
而在Redis中采用的是 RESP(Redis Serialization Protocol)协议。
RESP
- Redis 1.2版本引入了RESP协议
- Redis 2.0版本中成为与Redis服务端通信的标准,称为RESP2
- Redis 6.0版本中,从RESP2升级到了RESP3协议,增加了更多数据类型并且支持6.0的新特性–客户端缓存。
虽然 RESP3 协议非常强,但是它与 RESP2 的兼容性特别差,所以到目前来看仍然使用的是 RESP2 协议。
在RESP中,通过首字节的字符来区分不同数据类型,常用的数据类型包括5种:
-
单行字符串:首字节是 ‘+’ ,后面跟上单行字符串,以CRLF( “\r\n” )结尾。
例如服务端在返回"OK": “+OK\r\n” -
错误(Errors):首字节是 ‘-’ ,与单行字符串格式一样,只是字符串是异常信息,以 CRLF 结尾。
例如:“-Error message\r\n” -
数值