Redis【一】 RESP协议

https://redis.io/topics/protocol

RESP:redis序列化协议

client-server交流

二进制安全的

网络层

client端建立tcp连接到Server port 6379,使用TCP连接

除了

  • 管道通信,一次可发送多条命令,然后等待回复
  • pub/sub

以外,是简单的request-response模型

RESP怎么使用的

client发送命令到redis server,使用字符串块的数组
server应答,根据命令的实现,返回相应的resp响应类型

在resp中,一些数据的类型是依赖数据的第一个byte:
简单字符串,reply的第一个byte是+
Errors第一个byte是-
Integers第一个byte是:
Bulk Strings 第一个byte是$
Arrys第一个byte是*

一个请求的协议中,不同的部分,使用 分隔

举个Intergers的例子

reply:":1000 "
数字的范围是有符号64位数字,和有符号long一样,
exists返回数字1表示存在,0不存在,incr返回incr后的数字,llen返回长度,sismember返回1表示true,0表示false

Bulk Strings

目的是表示二进制安全的String,可长达512MB
"$6 foobar " foobar
"$0 " 空串
"$-1 " 表示Null

RESP Arrays
client向server发送的是Arrays,*后面会跟一个数字,表示数组长度

"0 " empty array
"
2 $3 foo $3 bar " "foo" 和 "bar"
"*3 :1 :2 :3 " 1 和 2 和 3

*3
$3
foo
$-1 空的元素
$3
bar -> ["foo",nil,"bar"]

Arrays可以糅合多种类型

高性能解析器for Redis协议

  • 使用前置长度来转换bulk data,因此不用扫描payload(有效载荷)
  • 块数据和多块数据长度可以和查找CR( )时一起获取
原文地址:https://www.cnblogs.com/windliu/p/9125379.html