redis[0] 通讯报文协议

来源:互联网 发布:手机查看守望先锋数据 编辑:程序博客网 时间:2024/04/30 11:49

据说redis很牛逼,一直很想拜读下,今天终于开始行动了,希望自己能坚持下去;

下面是一些学习redis的通讯协议的笔记
学习材料:http://redis.io/topics/protocol [redis官网文档]

1、redis 中通讯协议是 RESP(REdis Serialization Protocol)
协议的设计原则:简单、解析速度快、易读(这里指的是对于人类来说可读性强,对象是人,不是机器)

2、RESP 是一种二进制安全的

3、协议中总共定义了五种数据类型:Simple Strings、Errors 、Integers 、Bulk Strings、Arrays
在协议中这五种数类型分别由五个符号代表
Simple Strings ————————– ‘+’
Errors ————————– ‘-’
Integers ————————– ‘:’
Bulk Strings ————————– ‘$’
Arrays ————————– ‘*’

4、每种数据的第一个字符就是其对应类型的符号

5、所有值都以 “\r\n” (CRLF) 结尾

下面分别说明这五种数据类型:
Simple Strings (‘+’) : 一个以 ‘+’开始,CRLF 结束的串,主要中间的值不能包含 结束符CR、LF
如:”+OK\r\n”

Errors(‘-‘) : 一个以 ‘-‘开始,CRLF 结束的串,主要中间的值不能包含 结束符CR、LF,值是错误信息
如:”-Error message\r\n”

Integers( ‘:’):一个以 ‘:’开始,CRLF 结束的串,值是一个 64 位的整数
如:”:1000\r\n”

Bulk Strings(‘$’):格式: ‘$’ + len + “\r\n” + val + “\r\n”
如:”$6\r\nfoobar\r\n” 表示值 “foobar”

Arrays( ‘*’) : 格式: ‘*’ + count + “\r\n” + count个值
其中这个值可以是RDSP五种数据中的任意一种
如:
“*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n”
“*2\r\n*3\r\n:1\r\n:2\r\n:3\r\n*2\r\n+Foo\r\n-Bar\r\n”

特殊情况:
空值有两种表示方法:”*-1\r\n” “$-1\r\n”
由于Arrays里面的元素可能又是一个Arrays,解析的时候需要注意

6、redis大多数情况下都是 请求-应答模式
当然有两个特殊情况:
发布订阅 ———– 客户端订阅之后,有人发布相应channel消息的时候,服务端直接推给客户端
多命令请求 ———– 对个命令请求,会分多个结果一起回来

0 0
原创粉丝点击