码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071
请求命令格式
- 每行用\r\n分割
- 第一行是参数数量
- 第二行开始,每行以此是每个参数的字节数和参数字符串,各占一行
比如:set hello redis
*3
$3
SET
$5
hello
$5
redis
上面为了方便看清,我们用换行展示,实际上发送的数据是一行:
*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5redis\r\n
返回格式
-
成功状态恢复:第一个字节为“+” (比如执行:seet hello redis)
-
错误状态恢复:第一个字节为“-” (比如执行:set hello redis)
-
整数回复:第一个字节为“:” (比如执行:incr count)
-
字符串回复:第一个字节为"$" (比如执行:get hello)
-
多条字符串回复:第一个字节为"*"(比如执行:mget redis php)
下面看几个例子,我们在cli里是看不到协议格式的,可以用nc去模拟交互
$nc -nvv 127.0.0.1 6379
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif lo0
src 127.0.0.1 port 52123
dst 127.0.0.1 port 6379
rank info not available
TCP aux info available
Connection to 127.0.0.1 port 6379 [tcp/*] succeeded!
seet hello redis
-ERR unknown command `seet`, with args beginning with: `hello`, `redis`,
set hello redis
+OK
get hello
$5
redis
incr count
:3
mset redis redis php php
+OK
mget redis php
*2
$5
redis
$3
php