Redis客户端使用RESP(Redis的序列化协议)协议与Redis的服务器端进行通信。 虽然该协议是专门为Redis设计的,但是该协议也可以用于其他 客户端-服务器 (Client-Server)软件项目。是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。
Redis 协议将传输的结构数据分为5 种最小单元类型,单元结束时统一加上回车 换行符号\r\n 。
- 单行字符串以“+”符号开头。
- 多行字符串以“$”符号开头,后跟字符串长度。
- 整数值以“:”符号开头,后跟整数的字符串形式。
- 错误消息以“-”符号开头。
- 数组以“*”号开头,后跟数组的长度。
单行字符串
+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
数组[1, 2,3]
*3\r\n:1\r\n:2\r\n:3\r\n
NULL
NULL用多行字符串表示,不过长度要写成-1 $-1\r\n
客户端->服务端
客户端向服务器发送的指令只有一种格式,多行字符串数组。比如一个简单的set指令set author codehole 会被序列化成下面的字符串。
*3\r\n$3\r\nset\r\n$6\r\nauthor\r\n$8\r\ncodehole\r\n