交头接耳
Redis的作者认为数据库的瓶颈不在于网络流量,在于数据库自身内部逻辑处理。所以Redis使用了浪费流量的文本协议。
RESP
RESP(Redis Serialization Protocol)是Redis序列化协议的简写。是一种直观的文本协议,优势在于实现过程简单,解析性极好
将传输的结构数据分为5种最小单元类型,单元结束统一加上回车换行符号\r\n
- 单行字符串以"+"符号开头
- 多行字符串以"$"符号开头,后跟字符串长度
- 整数值以":"符号开头,后跟整数的字符串形式
- 错误消息以"-"符号开头
- 数组以"*"号开头,后跟数组的长度
单行字符串 hello word
hello world\r\n
多行字符串 hello world
$ll\r\nhello world\r\n
多行字符串当然也可以表示单行字符串
整数1024
: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用多行字符串表示,不过长度协程-l
$-l\r\n
空串
空串用多行字符串表示,长度填0
$0\r\n\r\n
两个\r\n,隔的是空串
客户端——》服务端
客户端向服务器发送的指令只有一种格式,多行字符串数组。比如一个简单的set指令set author codehole会被序列化成下面的字符串
*3\r\n$3\r\nset\r\n&6\r\nauthor\r\n$8\r\ncodehole\r\n