Redis RESP 通信协议
RESP(Redis Serialization Protocol) 是 Redis 序列化协议的简写。它是一种直观的文本协议,优势在于实现异常简单,解析性能极好。
RESP
Redis 协议将传输的结构数据分为 5 种最小单元类型,单元结束时统一加上回车换行符号\r\n。
- 单行字符串 以
+
符号开头。 - 多行字符串 以
$
符号开头,后跟字符串长度。NULL 用多行字符串表示,不过长度写为 -1,空串写为 0 - 整数值 以
:
符号开头,后跟整数的字符串形式。 - 错误消息 以
-
符号开头。 - 数组 以
*
号开头,后跟数组的长度。
+hello world\r\n
$11\r\nhello world\r\n
:1024\r\n
-WRONGTYPE Operation against a key holding the wrong kind of value\r\n
*3\r\n:1\r\n:2\r\n:3\r\n
$-1\r\n
$0\r\n\r\n
Client 发送给 Server
客户端向服务器发送的指令只有一种格式,多行字符串数组。
比如 set author codehole
被序列化为:
*3\r\n$3\r\nset\r\n$6\r\nauthor\r\n$8\r\ncodehole\r\n
Server 发送给 Client
服务器向客户端回复的响应要支持多种数据结构,所以消息响应在结构上要复杂不少。不过再复杂的响应消息也是以上 5 中基本类型的组合。
冗余 \r\n
在技术领域性能并不总是一切,还有简单性、易理解性和易实现性,这些都需要进行适当权衡。