本文主要介绍Redis中的通信协议RESP是如何实现的,具有一定的参考价值。有兴趣的朋友可以参考一下。希望大家看完这篇文章后收获多多。让边肖带你去了解它。
RESP
resp (Redis序列化协议)是Redis序列化协议的简称,是一种实现过程简单、解析性能好的纯文本协议。
5种单元类型
Redis协议将传输的数据结构分成五种最小的单元类型,单元以回车符结束\ r \ n。
1. 单行字符串以 + 符号开头
示例:你好,世界\ r \ n2. 多行字符串以 $ 符号开头,后跟字符串长度
示例:$ 11 \ r \多行字符串也可以用来表示单行字符串。
3. 整数值以 : 符号开头,后跟整数的字符串形式
示例:1024 \ r \ n4. 错误信息以 - 符号开头
错误的参数类型
示例:-对akeyholdinghewrongkindofvalue再次执行错误类型操作\ r \ n5. 数组以 * 号开头,后跟数组的长度
示例:* 3 \ r \ n : l \ r \ n 33602 \ r \ n :3 \ r \ n n两种特殊类型
1. NULL
使用长度为-1的空多行字符串表示形式。
示例:$-1 \ r \ n2. 空字符串
空字符串用多行字符串表示,长度用0填充。
示例:$ 0 \ r \ n \ r \有两个空字符串,因为空字符串在它们之间。
客户端请求服务端
客户端发送给服务器的指令只有一种格式,即多行字符串数组。
例如,一个简单的指令集x x将被序列化为以下字符串
* 3 \ r \ n $ 3 \ r \ n set \ r \ n $ 1 \ r \ NX \ r \ n $ 1 \ r \ n控制台如下所示
*3
$3
设置
$1
x
$1
x
服务端响应客户端
服务器在响应客户端信息时,会用到各种各样的数据结构,比客户端发送到服务器时要复杂得多,但即使非常复杂,也是上面提到的五种基本类型的组合。
单行字符串响应
127.0.0.1:6379setxx
OK上面的OK是单行字符串响应(不带双引号),也就是OK。
错误响应
127.0.0.1:6379incrx
(error } errvalueisntentgeroutofrange自动递增一个字符串,服务器会抛出一个错误提示。
-ERR值不是整数或超出范围
整数响应
127.0.0.1:6379incrbooks
(integer)11是整数响应:1。
多行字符串响应
127.0.0.1:6379getx
' X '上括号中的X是多行字符串响应,即:
$1
十.数组响应
127 . 0 . 0 . 1:6379 hsetinfonamebibabo
(整数)1
127 . 0 . 0 . 13360 . 133333636318
(整数)1
西汀福赛雄
(整数)1
127 . 0 . 0 . 1:6379 hgmetallinfo
1)“名称”
2)'bibabo '
3)“年龄”
4)'18'
5)“性”
6)上面的hgetall命令返回一个数组。0、2和4的字符串是哈希表的键,1、3和6的字符串是值。客户端负责将数组组装成字典并返回。
*6
$4
名字
$6
bibabo
$3
年龄
$2
18
$3
性
$4
男嵌套
127.0.0.1:6379scan0
1)'0'
2)1)“信息”
2)“书”
3)‘作者’扫描命令用于扫描服务器中包含的所有按键列表,通过光标一次获取一个部件。该命令返回嵌套数组。
数组的第一个值代表光标的值。如果该值为0,则意味着遍历已经完成。如果不是0,则使用该值作为下一次扫描的参数。
数组的第二个值是数组,它是键的列表。
*2
$1
0
*3
$4
信息
$5
书
$6
作者:感谢您仔细阅读本文。希望边肖分享的文章《如何在Redis中实现RESP通信协议》对大家有所帮助。同时也希望大家多多支持,关注行业信息渠道,多了解!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154053.html