
原文: Reading and Writing Redis Protocol in Go
翻译整理: smallnest, 译文连接: 使用 Go 语言读写Redis协议。 转载请保留原文出处和译文译者和出处。
这篇文章使用两个简单的Reader和Writer实现了redis客户端的读写协议,通过这两个实现可以容易地学习Redis协议是如何工作的。
如果你想寻找一个全功能的、产品级的Redis client, 推荐你看看 Gary Burd的 redigo
开始之前,建议你先阅读一下 Redis协议的介绍。
官方的协议可以在其网站上找到: protocol。 Redis的协议叫做 RESP (REdis Serialization Protocol),客户端和服务器端通过基于文本的协议进行通讯。
所有的服务器和客户端之间的通讯都使用以下5中基本类型:
- 简单字符串: 服务器用来返回简单的结果,比如"OK"或者"PONG"
- bulk string: 大部分单值命令的返回结果,比如 GET, LPOP, and HGET
- 整数: 查询长度的命令的返回结果
- 数组: 可以包含其它RESP对象,设置数组,用来发送命令给服务器,也用来返回多个值的命令
- Error: 服务器返回错误信息
RESP的第一个字节表示数据的类型:
- 简单字符串: 第一个字节是 "+", 比如 "+OK\r\n"
- bulk string: 第一个字节是 "\$", 比如 "$6\r\nfoobar\r\n"
- 整数: 第一个字节是 ":", 比如 ":1000\r\n"
- 数组: 第一个字节是 "", 比如 "2\r\n\$3\r\nfoo\r\n\$3\r\nbar\r\n"
- Error: 第一个字节是 "-", 比如 "-Error message\r\n"
基本了解Redis的协议之后,我们就可以实现它的读写器了。