RESP 是 Redis 序列化协议的简写。它是⼀种直观的⽂本协议,优势在于实现异常简单,解析性能极好。
Redis 协议将传输的结构数据分为 5 种最⼩单元类型,单元结束时统⼀加上回⻋换⾏符号\r\n。
间隔符号,在Linux下是\r\n,在Windows下是\n
1. 单⾏字符串 以 + 符号开头。
2. 多⾏字符串 以 $ 符号开头,后跟字符串⻓度。
3. 整数值 以 : 符号开头,后跟整数的字符串形式。
4. 错误消息 以 - 符号开头。
5. 数组 以 * 号开头,后跟数组的⻓度。
单⾏字符串 hello world
+hello world\r\n
多⾏字符串 hello world
$11\r\nhello world\r\n
整数 1024
:1024\r\n
错误 参数类型错误
-WRONGTYPE Operation against a key holding the wrong kind of value\r\n
数组 [1,2,3]
*3\r\n:1\r\n:2\r\n:3\r\n
NULL ⽤多⾏字符串表示,不过⻓度要写成-1。
$-1\r\n
空串 ⽤多⾏字符串表示,⻓度填 0。
$0\r\n\r\n
注意这⾥有两个\r\n。为什么是两个?因为两个\r\n之间,隔的是空 串。

客户端 -> 服务器

客户端向服务器发送的指令只有⼀种格式,多⾏字符串数组。⽐如⼀ 个简单的 set 指令set author codehole会被序列化成下⾯的字 符串。

服务器 -> 客户端

服务器向客户端回复的响应要⽀持多种数据结构,所以消息响应在结构上要复杂不少。不过再复杂的响应消息也是以上 5 中基本类型的组合。
单⾏字符串响应
127.0.0.1:6379> set author codehole
OK
这⾥的 OK 就是单⾏响应,没有使⽤引号括起来。
+OK
错误响应
127.0.0.1:6379> incr author
(error) ERR value is not an integer or out ofrange
试图对⼀个字符串进⾏⾃增,服务器抛出⼀个通⽤的错误。
-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 author
"codehole"
这⾥使⽤双引号括起来的字符串就是多⾏字符串响应

RESP协议的更多相关文章

  1. sqler sql 转rest api 源码解析(二) resp 协议

    resp 协议主要是方便使用redis 客户端进行连接,resp 主要是依赖 tidwall/redcon golang redis 协议包 resp 服务说明 server_resp.go 文件,干 ...

  2. Redis系列(五):Redis的RESP协议详解

    一.什么是RESP Redis是Redis序列化协议,Redis客户端RESP协议与Redis服务器通信.Redis协议在以下几点之间做出了折衷: 简单的实现 快速地被计算机解析 简单得可以能被人工解 ...

  3. Redis【一】 RESP协议

    https://redis.io/topics/protocol RESP:redis序列化协议 client-server交流 二进制安全的 网络层 client端建立tcp连接到Server po ...

  4. 搞懂Redis协议RESP

    RESP (REdis Serialization Protocal) Redis客户端和服务端之间通信的协议.它很简单,建立在TCP协议上,提供简单.高性能.可读性强的数据序列化的规范和语义. 5种 ...

  5. Redis进阶实践之十七 Redis协议的规范

    一.介绍            Redis客户端使用称为RESP(Redis的序列化协议)的协议与Redis服务器进行通信. 虽然协议是专门为Redis设计的,但它可以用于其他客户端 - 服务器软件项 ...

  6. 用Netty解析Redis网络协议

    用Netty解析Redis网络协议 根据Redis官方文档的介绍,学习了一下Redis网络通信协议.然后偶然在GitHub上发现了个用Netty实现的Redis服务器,很有趣,于是就动手实现了一下! ...

  7. Redis 协议为例谈简单的协议分析

    怎样去研究一个协议的过程,协议的格式,好处,怎么样模拟发包等,下面是一个简单的过程记录. 研究的步骤: 协议相关的资料,RFC,官方文档等.弄清楚协议工作在4层还是7层,是二进制还是文本协议等 抓包, ...

  8. Redis随笔(六)RESP的协议规范

    1.官网文档 https://redis.io/topics/protocol http://www.redis.cn/topics/protocol.html 2.协议介绍 redis协议规范(Re ...

  9. Netty 源码中对 Redis 协议的实现

    原文地址: haifeiWu的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 近期一直在做网络协议相关的工作,所以博客也就与之相关的比较多,今天楼主结合 Re ...

随机推荐

  1. python django 简单接口测试页面

    项目创建订单只能是接口创建的,之前都是用jar包放到jmeter里调用下单,给产品或者运维用不太方便,就想用django写一个带前端界面的下单web程序 项目结构 代码,比较渣 # coding=ut ...

  2. oracle数据处理之sql*loader(一)

    SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,它比较适合业务分析类型数据库(数据仓库);使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作 ...

  3. python中的锁lock=threading.Lock()

    避免多个线程保卫同一块数据的时候,产生错误,所以加锁来防止这种问题 个人理解:当打印结果是交替打印时,但是如果需求是需要打印完一个线程的内容后,再去打印另一个线程的内容,就需要用到锁 不加锁打印结果: ...

  4. Linux实战(13):Ubuntu被远程

    此方法采用的xrdp原生方案,优点兼容性比较好. 安装xrdp sudo apt install xrdp #最高权限安装xrdp 修改配置 nano /etc/xrdp/startwm.sh #使用 ...

  5. PHP基础之面向对象篇

    前言 前面写的都是运算符.流程控制.排序查找等,下面说一说面向对象的一些内容.这是前面写的,有兴趣可以去看一看. PHP入门之类型与运算符 PHP入门之流程控制 PHP入门之函数 PHP入门之数组 P ...

  6. hystrix熔断器之command实现

    HystrixCommand是hystrix执行命令的具体实现,实现流程如下: 1.调用HystrixCommandExecutionHook的onStart方法 3.调用HystrixRequest ...

  7. CPF 入门教程 - 绘图(四)

    CPF NetCore跨平台UI框架,增加了Vlc支持跨平台播放视频. 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF ...

  8. MySQL手注之联合查询注入

    了解联合查询注入之前,先要了解一下什么是union? union是用于合并两个sql查询结果的语句. 要使用union 必须有相同的列数  必须有两条以上的select语句组成  列的数据类型必须兼容 ...

  9. 分页查询对象Page

    1 public class Page { 2 //当前页码 3 private Integer pageNo = 1; 4 //每页显示条数 5 private Integer pageSize = ...

  10. sqli-labs第一关 详解

    sqli-labs第一关 方法一:手工注入 方法二:sqlmap工具 两种方式,都可以学学,顺便学会用sqlmap,也是不错的.不多说,我们开始吧 方法一: 来到第一关,图上说我们需要一个数字的参数 ...