Redis协议(RESP)说明
RESP
REdis Serialization Protocol 用于redis的client和server 交互的协议
RESP 遵循的原则
- 实现简单(simple to implement)
- 快速解析(fast to parse)
- 人类可读 (human readable)
请求响应模型(Request-Response Model)
RESP 就是一个简单的请求响应,处理两个特殊情况
- pipeline, 客户端可以一次性发送多个请求然后等待响应
- pub/sub, 对于pub/sub 客户端不再需要发送命令,而是由服务器推送
RESP 协议描述
RESP在redis1.2 引入,在Redis2.0成为标准协议
RESP 实际上就是一个序列化协议,可以支持simple stringserrorsintegersbulk stringsarrays
在redis中使用RESP作为Request-Response协议时使用方式如下
- 客户端将命令以RESP的bulk string数组的形式发送给redis服务端
- redis服务端根据命令来返回对应的RESP数据类型
在RESP中总是会以\r\n(CRLF)结尾
在RESP中,数据类型取决于第一个字符
| 第一个字符 | 对应的类型 | 示例 | 
|---|---|---|
| + | simple strings | +OK\r\n | 
| - | errors | -ERR unknown command 'foobar'\r\n-表示为这是个异常,-到(第一个空格)为错误类型,之后的为错误具体说明 | 
| : | integers | :100\r\n数字范围在-2^63<=n<=2^63-1(64为有符号数) | 
| $ | bulk strings | $2\r\nOK\r\nbulk string和simple string的区别是bulk string是二进制安全的(因为标记了字符的长度)$0\r\n=>empty string特殊$-1\r\n=>nil | 
| * | arrays | *2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n=>两个bulk string的数组.*-1\r\n=>null array | 
第一个字符对应的类型示例+simple strings+OK\r\n``-errors-ERR unknown command 'foobar'\r\n -表示为这是个异常,-到(第一个空格)为错误类型,之后的为错误具体说明:integers:100\r\n数字范围在 -2^63<=n<=2^63-1(64为有符号数)$bulk strings$2\r\nOK\r\n bulk string和simple string的区别是bulk string是二进制安全的(因为标记了字符的长度)$0\r\n=>empty string 特殊$-1\r\n=>nil``*arrays*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n=>两个bulk string的数组. *-1\r\n=>null array#
| 1 | C: *2\r\n |