Redis客户端的通信协议RESP
程序员文章站
2022-03-10 09:19:24
...
Redis客户端的通信协议
Redis客户端与Redis服务器之间的通信协议是在TCP协议之上构建的,Redis制定了RESP(Redis Serialization Protocol,Redis序列化协议)来实现客户端与服务端的正常交互。
这种协议简单高效,又容易被人类识别。
一、举个例子
例如客户端想要发送一条命令:set name jxl给服务端,那么客户端需要将命令封装成如下格式,每行之间使用\r\n分隔:
*3
$3
set
$4
name
$3
jxl
这样Redis服务端就能够按照RESP将其解析为set name jxl命令,执行后回复的格式如下:
+OK
二、解析发送命令
如上的例子,
*参数数量 CRLF
$参数1的字节数量 CRLF
参数1 CRLF
$参数2的字节数量 CRLF
参数2 CRLF
……
$参数n的字节数量 CRLF
参数n CRLF
上面的例子是格式化的结果,实际上发送的内容如下:
*3\r\n$3\r\nset\r\n$4\r\nname\r\n$3\r\njxl\r\n
三、解析返回结果
Redis返回结果的类型有以下五种:
- 状态回复:在RESP中第一个字节为“+”。
- 错误回复:在RESP中第一个字节为“-”。
- 整数回复:在RESP中第一个字节为“:”。
- 字符串回复:在RESP中第一个字节为“$”。
- 多条字符串回复:在RESP中第一个字节为“*”。
推荐阅读
-
.NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
-
.NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
-
[转] Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
-
Java Socket实现Redis客户端的详细说明
-
Golang 实现 Redis系列(六)如何实现 pipeline 模式的 redis 客户端
-
推荐一款神仙颜值的 Redis 客户端工具(速收藏)
-
Redis客户端及服务端的安装教程详解
-
Redis的Python客户端redis-py安装使用说明文档
-
nosql - redis的php客户端为什么连接数这么大
-
美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout