Redis协议规范RESP一篇即懂

52次阅读

共计 1208 个字符,预计需要花费 4 分钟才能阅读完成。

序章

Redis 即 REmoteDictionaryServer (远程字典服务);

而 Redis 的协议规范是 Redis Serialization Protocol (Redis 序列化协议)

该协议是用于与 Redis 服务器通信的,用的较多的是 Redis-cli 通过 pipe 与 Redis 服务器联系;

协议如下:

客户端以规定格式的形式发送命令给服务器;

服务器在执行最后一条命令后,返回结果。

特点

1、实现简单
2、快速解析
3、可读性好

客户端发送命令规定格式(类型):5 种类型

提示:间隔符号,在 Linux 下是 \r\n,在 Windows 下是 \n
1、简单字符串 Simple Strings, 以 “+” 加号 开头

格式:+ 字符串 \r\n

字符串不能包含 CR 或者 LF(不允许换行)

eg: “+OK\r\n”

注意:为了发送二进制安全的字符串,一般推荐使用后面的 Bulk Strings 类型

2、错误 Errors, 以 ”-“ 减号 开头

格式:- 错误前缀 错误信息 \r\n

错误信息不能包含 CR 或者 LF(不允许换行),Errors 与 Simple Strings 很相似,不同的是 Erros 会被当作异常来看待

eg: “-Error unknow command ‘foobar’\r\n”

3、整数型 Integer,以 “:” 冒号开头

格式:: 数字 \r\n

eg: “:1000\r\n”

4、大字符串类型 Bulk Strings, 以 “$” 美元符号开头,长度限制 512M

格式:$ 字符串的长度 \r\n 字符串 \r\n

字符串不能包含 CR 或者 LF(不允许换行);

eg: “$6\r\nfoobar\r\n”    
其中字符串为 foobar,而 6 就是 foobar 的字符长度

“$0\r\n\r\n”       空字符串

“$-1\r\n”           null

5、数组类型 Arrays,以 “*” 星号开头

格式:* 数组元素个数 \r\n 其他所有类型 (结尾不需要 \r\n)

注意:只有元素个数后面的 \r\n 是属于该数组的,结尾的 \r\n 一般是元素的

eg: “*0\r\n”      空数组

"\*2\\r\\n$2\\r\\nfoo\\r\\n$3\\r\\nbar\\r\\n"
数组包含 2 个元素,分别是字符串 foo 和 bar

"\*3\\r\\n:1\\r\\n:2\\r\\n:3\\r\\n"       
数组包含 3 个整数:1、2、3

"\*5\\r\\n:1\\r\\n:2\\r\\n:3\\r\\n:4\\r\\n$6\\r\\nfoobar\\r\\n"  
包含混合类型的数组

"\*-1\\r\\n"         Null 数组

"\*2\\r\\n\*3\\r\\n:1\\r\\n:2\\r\\n:3\\r\\n\*2\\r\\n+Foo\\r\\n-Bar\\r\\n"   
数组嵌套,外层数组包含 2 个数组,整理后如下:"\*2\\r\\n\
*3\\r\\n:1\\r\\n:2\\r\\n:3\\r\\n\   
*2\\r\\n+Foo\\r\\n-Bar\\r\\n"

正文完
 0