Redis通讯协议Resp

什么是redis通讯协议

RESP是REdis Serialization Protocol的简称,也就是专门为redis设计的一套序列化协议.
这个协议其实在redis的1.2版本时就已经出现了,但是到了redis2.0才最终成为redis通讯协议的标准。

redis通讯协议(RESP )的格式

Redis的通信协议首先是以行来划分,每行以\r\n行结束。每一行都有一个消息头,消息头共分为5种分别如下:

+表示一个正确的状态信息,具体信息是当前行+后面的字符。
-表示一个错误信息,具体信息是当前行-后面的字符。
* 表示消息体总共有多少bulk行,不包括当前行,*后面是具体的行数。
$表示下一行数据长度,不包括换行符长度\r\n,后面则是对应的长度的数据。
:表示返回一个数值,:后面是相应的数字节符。

例1

命令"set aqin 1" 一般被序列化成
*3\r\n$3\r\nset\r\n$4\r\naqin\r\n$1\r\n1\r\n
一般人看不懂,为了方便理解, 格式化上面的例子

*3\r\n        -- 这个命令包含3个(bulk)字符串
$3\r\n        -- 第一个bulk string有3个字节
set\r\n       -- 第一个bulk string是set
$4\r\n        -- 第二个bulk string有4个字节
aqin\r\n      -- 第二个bulk string是agan
$1\r\n        -- 第三个bulk string有1个字节
1\r\n         -- 第三个bulk string是1

执行它的返回是:

+OK\r\n 

例2

命令"get aqin":
*2\r\n$3\r\nget\r\n$4\r\naqin\r\n
即:

*2\r\n     -- 这个命令是2个bulk字符串的数组
$3\r\n     -- 第一个bulk字符串有3个字节: get
get\r\n
$4\r\n     -- 第二个bulk字符串有4个字节: aqin
aqin\r\n

测试和验证

用telnet,连接方式为:
telnet
连接成功后,如果redis设置了密码,则还需要密码认证,这个时候其实已经和redis建立了通信,使用redis命令auth认证即可:
auth
命令:keys

bodeMacBook-Pro:~ bo$ telnet xx.xx.xx.xx:xxxx
Trying xx.xx.xx.xx
Connected to xx.xx.xx.xx
Escape character is '^]'.
auth aqin
+OK
keys *
*13
$4
key9
$4
aqin
$4
key4
$4
key3
$4
key6
$4

每个命令返回的都是RESP格式(\r\n不可见,体现为换行).

命令:set aqin 1

set aqin 1
+OK

命令:get aqin

get aqin
$1
1

使用telnet执行RESP格式的"get agan": *2\r\n$3\r\nget\r\n$4\r\naqin\r\n

*2
$3
get
$4
aqin 
$1
1

你可能感兴趣的:(Redis,redis,bootstrap,数据库)