Redis的作者认为数据库系统的瓶颈一般不在于网络流量,而是数据库自身内部逻辑处理上。所以即使Redis使用了浪费流量的文本协议,依然可以取得极高的访问性能。Redis将所有数据都放在内存,用一个单线程对外提供服务,单个节点在跑满一个CPU核心的情况下可以达到了10w/s的超高QPS。

RESP(Redis Serialization Protocol)

RESP是Redis序列化协议的简写。它是一种直观的文本协议,优势在于实现异常简单,解析性能极好。Redis协议将传输的结构数据分为5种最小单元类型,单元结束时统一加上回车换行符号\r\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

数组

#数组 [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 name mango#指令转换*3\r\n$3\r\nset\r\n$4\r\name\r\n$5\r\mango\r\n#在控制台输出这个字符串*3$3set$4name$5mango

服务器响应结果

服务器向客户端回复的响应要支持多种数据结构,所以消息响应在结构上要复杂不少。不过再复杂的响应消息也是以上 5 种基本类型的组合。

单行字符串响应

> set name mangoOK#响应消息+OK

错误响应

> incr name(error) ERR value is not an integer or out of range#响应消息-ERR value is not an integer or out of range

整数类型响应

> incr number(integer) 1#响应消息:1

多行字符串响应

> get name"mango"#响应消息 这里使用双引号括起来的字符串就是多行字符串响应$5mango

数组响应

> hset user name mango(integer) 1> hset user age 18(integer) 1> hgetall user1) "name"2) "mango"3) "age"4) "18"#响应信息*4$4name$5mango$3age$218

嵌套

> scan 0 match name* count 101) "0"2) 1) "name1"2) "name2"#响应信息*2$10*2$5name1$5name2Redis协议里有大量冗余的回车换行符,但是这不影响它成为互联网技术领域非常受欢迎的一个文本协议。有很多开源项目使用RESP作为它的通讯协议。在技术领域性能并不总是一切,还有简单性、易理解性和易实现性,这些都需要进行适当权衡。

一名正在抢救的coder

笔名:mangolove

CSDN地址:https://blog.csdn.net/mango_love

GitHub地址:https://github.com/mangoloveYu

Redis通讯协议RESP详解相关推荐

  1. 【无人机开发】通讯协议MavLink详解

    1. MAVLink简介 MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)之间通 ...

  2. BeetleX之Websocket协议分析详解

    Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...

  3. websocket 带头部信息请求 header_BeetleX之Websocket协议分析详解

    Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...

  4. Redis持久化——AOF机制详解

    在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis ...

  5. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

  6. IPv6邻居发现协议--NDP详解

    一.ICMPv6 -Internet控制报文协议 ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或错误 协议类型号(即:IPv6Next Header)为58 icmpv6可以提 ...

  7. Redis设计与实现详解二:Redis数据库实现

    Redis设计与实现详解一:数据结构与对象 Redis设计与实现详解三:多机功能实现 Redis设计与实现详解四:其他单机功能 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态 ...

  8. redis集群模式详解

    redis集群模式详解 一,redis集群 1,哨兵集群 2,redis Cluster 二,redis Cluster集群的搭建 1,配置文件 2,redis服务启动 三,springboot连接r ...

  9. 一致性协议-ChainPaxos详解

    一致性协议-ChainPaxos详解 一.背景 二.算法实现 流程概况 主流程实现细节 故障处理以及reconfiguration 选举 新增副本 线性读 三.总结 一.背景 该paxos变体的主要特 ...

最新文章

  1. 【Django】创建项目及框架介绍,学习笔记(一)
  2. AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:10-09:55裴健教授《智能搜索:从工具到思维方式和心智》
  3. html5添加渐变边框效果,《CSS3揭秘》上(边框,投影,渐变,条纹效果,蚂蚁行军)...
  4. Wow,一个免费、不怕打的评论插件!
  5. 在vue中安装使用vux
  6. 怎么查看usb读取信息_电脑弹出USB设备时提示该设备正在使用中的解决方法
  7. php进程数是指什么,25.查看php 某个服务的进程数
  8. 小汤学编程之JDBC(一)——JDBC概述和快速入门
  9. 红帽 与 CentOS 之间的恩怨情仇
  10. asp.net web.config配置节说明
  11. 如何从 ArcView 3.3 版本的工程迁移到 ArcGIS Desktop 10 ?
  12. java项目目录_Java项目目录解释
  13. 计算机屏保代码,AD 脚本kixtart运用之五(用户电脑屏保设置)(示例代码)
  14. jinja模板简介与概述
  15. 腾讯云产品介绍——腾讯云云服务器之运维指南
  16. excel单元格内容拆分_EXCEL批量拆分单元格,也可以这么快
  17. ubuntu下配置vscode和opencv4要点记录
  18. itunes下载的app在哪里及如何查看iTunes下载的软件
  19. 腾讯云轻量服务器在线安装MySQL
  20. Android性能调优实例

热门文章

  1. Python Flask服务同时接收单个、多个上传的文件
  2. service XXX does not support chkconfig(service报错)
  3. Win7启用Administrator账户登录
  4. python判断进程是否存在
  5. matlab主程序和子函数不在一个文件夹下,怎么调用?
  6. python 基础(一)
  7. python Unable to find vcvarsall.bat 错误
  8. void*和void类型
  9. tyvj1202 数数食物链
  10. 处理wordpress上传中文名附件乱码问题