redis通信协议

111 阅读1分钟

Redis客户端使用RESP(Redis的序列化协议)协议与Redis的服务器端进行通信。 虽然该协议是专门为Redis设计的,但是该协议也可以用于其他 客户端-服务器 (Client-Server)软件项目。是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。

Redis 协议将传输的结构数据分为5 种最小单元类型,单元结束时统一加上回车 换行符号\r\n 。

  1. 单行字符串以“+”符号开头。
  2. 多行字符串以“$”符号开头,后跟字符串长度。
  3. 整数值以“:”符号开头,后跟整数的字符串形式。
  4. 错误消息以“-”符号开头。
  5. 数组以“*”号开头,后跟数组的长度。
单行字符串

+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