实现 Redis 协议解析器
本文是 《用 Golang 实现一个 Redis》系列文章第二篇,本文将分别介绍 Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分。 Redis 通信协议 Redis 自 2.0 版本起使用了统一的协议 RESP (REdis Serialization Protocol),该协议易于实现,计算机可以高效的进行解析且易于被人类读懂。 RESP 是一个二进制安全的文本协议,工作于 TCP 协议上。客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 RESP 定义了5种格式: 简单字符串(Simple String): 服务器用来返回简单的结果,比如"OK"。非二进制安全,且不允许换行。 错误信息(Error): 服务器用来返回简单的结果,比如"ERR Invalid Synatx"。非二进制安全,且不允许换行。 整数(Integer): llen 、 scard 等命令的返回值, 64位有符号整数 字符串(Bulk String): 二进制安全字符串, get 等命令的返回值 数组(Array, 旧版文档中称 Multi Bulk Strings): Bulk String 数组,客户端发送指令以及 lrange 等命令响应的格式 RESP 通过第一个字符来表示格式: 简单字符串:以"+" 开始, 如:"+OK\r\n"