Redis RESP 通信协议

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

在技术领域性能并不总是一切,还有简单性、易理解性和易实现性,这些都需要进行适当权衡。

参考