MoeLove Note

理解 Redis 协议

简介 Redis 的客户端和服务端之间采取了一种独立名为 RESP(REdis Serialization Protocol) 的协议,作者主要考虑了以下几个点: 容易实现 解析快 人类可读 注意:RESP 虽然是为 Redis 设计的,但是同样也可以用于其他 C/S 的软件。 数据类型及示例 RESP 主要可以序列化以下几种类型:整数,单行回复(简单字符串),数组,错误信息,多行字符串。Redis 客户端向服务端发送的是一组由执行的命令组成的字符串数组,服务端根据不同的命令回复不同类型的数据,但协议的每部分都是以 “\r\n” (CRLF) 结尾的。另外 RESP 是二进制安全的,不需要处理从一个进程到另一个进程的传输,因为它使用了前缀长度进行传输。 在 RESP 中, 一些数据的类型通过它的第一个字节进行判断: 单行回复:回复的第一个字节是 “+” 错误信息:回复的第一个字节是 “-” 整形数字:回复的第一个字节是 “:” 多行字符串:回复的第一个字节是 “\$” 数组:回复的第一个字节是 “*” 单行回复 以 “+” 开头,以 “\r\n” 结尾的字符串形式。e.g. +OK\r\n 响应的客户端库,应该返回除 “+” 和 CRLF 以外的内容,例如上面的内容,则返回 “OK”. e.g. 127.0.0.1:6379> set name TaoBeier +OK\r\n # 服务端实际返回 --- OK # redis-cli 客户端显示 错误信息 错误信息和单行回复很像,不过是把 “+” 替换成了 “-“。而这两者之间真正的区别是,错误信息会被客户端视为异常,并且组成错误类型的是错误消息本身。e.