redis版本
- redis版本:3.2.11
通信协议
-
RESP(Redis Serialization Protocol)
是Redis序列化协议,是一种文本协议(容易被人识别),实现过程非常简单,解析性能极好。 -
Redis协议将传输的结构数据分为5种最小单元类型,回车换行符(只能是
\r\n
)作为分隔符。- 单行字符串以
+
开头 - 多行字符串以
$
开头,后跟字符串长度 - 整数值以
:
开头,后跟整数的字符串形式 - 错误消息以
-
符号开头 - 数组以
*
开头,后跟数组长度
- 单行字符串以
-
命令格式
* <参数数量> CRLF $ <参数1的字节数量> CRLF <参数1>CRLF ...... $ <参数N的字节数量> CRLF <参数N>CRLF
-
案例
单行字符串 + Hello\r\n 多行字符串 $5\r\nHello\r\n 整数 :1024 错误 -WRONGTYPE Operation against a key holding the wrong kind of value\r\n 数组 *3\r\n:1\r\n:2\r\n:3\r\n NULL NULL用多行字符串表示,不过长度要写成-1 $-1\r\n 空串 $0\r\n\r\n
-
以
set hello world
为例1. 有三个参数set hello world *3 2. 每个参数的字节数分别为:set为3,hello为5,world为5 $3 SET $5 hello $5 world 3. 最终的传输文本为 *3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n
-
redis返回结果类型分为5种,查看返回结果,使用redis-cli是无法看到真正的响应文本的,因为redis-cli对响应文本做了处理,可以使用telnet或者nc来查看。
状态回复:+
# nc 127.0.0.1 6379 set username jannal +OK
错误回复:-
```java
# nc 127.0.0.1 6379
incr num
-WRONGTYPE Operation against a key holding the wrong kind of value
```
整数回复::
```java
# nc 127.0.0.1 6379
incr number
:1
```
字符串回复:$
```java
# nc 127.0.0.1 6379
get username
$6
jannal
```
多条字符串回复:*
```java
# nc 127.0.0.1 6379
mset jannal 27 jack 28
+OK
mget jannal jack
*2
$2
27
$2
28
字符串或多条字符串回复如果是NULL,会返回-1,不存在的key执行get操作,返回-1
get no
$-1
```
- 通信协议图