Redis中通信协议RESP是怎么实现的

53次阅读
没有评论

共计 1709 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要介绍了 Redis 中通信协议 RESP 是怎么实现的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

RESP

RESP(Redis Serialization Protocol) 是 Redis 序列化协议的简写,该协议是纯文本协议,实现过程简单,解析性能较好。

5 种单元类型

Redis 协议将传输的数据结构分为 5 种最小的单元类型,单元结束时统一加上回车换行符号 \r\n。

1. 单行字符串以 + 符号开头

 例:+hello world\r\n

2. 多行字符串以 $ 符号开头,后跟字符串长度

 例:$11\r\nhello world\r\n

多行字符串也可以用于表示单行字符串

3. 整数值以 : 符号开头,后跟整数的字符串形式

 例::1024\r\n

4. 错误信息以 – 符号开头

参数类型错误

 例: -WRONGTYPE Operation against a key holding the wrong kind of value\r\n

5. 数组以 * 号开头,后跟数组的长度

 例:*3\r\n:l\r\n:2\r\n:3\r\n

两种特殊类型

1. NULL

NULL 使用多行字符串表示,长度为 -1

 例:$-1\r\n

2. 空字符串

空串用多行字符串表示,长度填 0

 例:$0\r\n\r\n

空字符串有两个 \r\n,因为两个 \r\n 之间的就是空串

客户端请求服务端

客户端向服务器发送的指令只有一种格式,就是多行字符串数组。

例如一个简单的 set 指令 set x x 会被序列化成下面的字符串

*3\r\n$3\r\nset\r\n$1\r\nx\r\n$1\r\nx\r\n

控制台展示如下

*3
x

服务端响应客户端

服务端响应客户端信息时,将会使用多种数据结构,比客户端发送到服务端时复杂很多,不过即便很复杂,也是上面提到的 5 种基本类型的组合。

单行字符串响应

127 . 0 .0.1: 6379  set x x 
OK

上面的 OK 就是单行字符串响应 (没有双引号),即 +OK

错误响应

127 . 0 . 0.1:6379  incr x 
(error} ERR value is not an integer or out of range

对一个字符串进行自增,服务器抛出错误提醒

-ERR value is not an integer or out of range

整数响应

127.0.0.1:6379  incr books 
(integer} 1

1 就是整数响应 :1

多行字符串响应

127.0.0.1:6379  get x
 x

上面用括号引起来的 x 就是多行字符串响应,即:

$1
x

数组响应

127.0.0.1:6379  hset info name bibabo
(integer) 1
127.0.0.1:6379  hset info age 18
(integer) 1
127.0.0.1:6379  hset info sex male
(integer) 1
127.0.0.1:6379  hgetall info
1)  name 
2)  bibabo 
3)  age 
4)  18 
5)  sex 
6)  male

上面的 hgetall 命令返回的就是一个数组,第 0、2、4 的字符串是 hash 表的 key,1、3、6 则是 value,客户端负责将数组组装成字典返回。

*6 
$4 
name 
$6 
bibabo 
$3 
age 
$2 
18 
$3 
sex 
$4 
male

嵌套

127.0.0.1:6379  scan 0 
1 ) 0  
2) 1 )  info  
2 ) books 
3 ) author

scan 命令用来扫描服务器包含的所有 key 列表,通过游标的形式一次获取一部分,该命令返回的是一个嵌套数组,

数组第一个值表示游标的值,如果这个值为 0,说明已经遍历完毕,如果不为 0,使用这个值作为下一次 scan 时的参数,

数组的第二个值又是一个数组,这个数组就是 key 的列表。

*2 
$4 
$5 
books 
$6 
author

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Redis 中通信协议 RESP 是怎么实现的”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计1709字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)