Redis 即 REmote Dictionary Server (远程字典服务);

而Redis的协议规范是 Redis Serialization Protocol (Redis序列化协议)

该协议是用于与Redis服务器通信的,用的较多的是Redis-cli通过pipe与Redis服务器联系;

协议如下:

客户端以规定格式的形式发送命令给服务器;

服务器在执行最后一条命令后,返回结果。

客户端发送命令的格式(类型):5种类型

间隔符号,在Linux下是\r\n,在Windows下是\n

1. 简单字符串 Simple Strings, 以 "+"加号 开头

格式:+ 字符串 \r\n

字符串不能包含 CR或者 LF(不允许换行)

eg: "+OK\r\n"

注意:为了发送二进制安全的字符串,一般推荐使用后面的 Bulk Strings类型

2. 错误 Errors, 以"-"减号 开头

  格式:- 错误前缀 错误信息 \r\n

错误信息不能包含 CR或者 LF(不允许换行),Errors与Simple Strings很相似,不同的是Erros会被当作异常来看待

eg: "-Error unknow command 'foobar'\r\n"

3. 整数型 Integer, 以 ":" 冒号开头

  格式:: 数字 \r\n

eg: ":1000\r\n"

4. 大字符串类型 Bulk Strings, 以 "$"美元符号开头,长度限制512M

  格式:$ 字符串的长度 \r\n 字符串 \r\n

字符串不能包含 CR或者 LF(不允许换行);

eg: "$6\r\nfoobar\r\n"    其中字符串为 foobar,而6就是foobar的字符长度

"$0\r\n\r\n"       空字符串

"$-1\r\n"           null

5. 数组类型 Arrays,以 "*"星号开头

  格式:* 数组元素个数 \r\n 其他所有类型 (结尾不需要\r\n)

注意:只有元素个数后面的\r\n是属于该数组的,结尾的\r\n一般是元素的

eg: "*0\r\n"      空数组

"*2\r\n$2\r\nfoo\r\n$3\r\nbar\r\n"      数组包含2个元素,分别是字符串foo和bar

    "*3\r\n:1\r\n:2\r\n:3\r\n"       数组包含3个整数:1、2、3

"*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$6\r\nfoobar\r\n"  包含混合类型的数组

"*-1\r\n"         Null数组

"*2\r\n*3\r\n:1\r\n:2\r\n:3\r\n*2\r\n+Foo\r\n-Bar\r\n"   数组嵌套,外层数组包含2个数组,整理后如下:

"*2\r\n

      *3\r\n:1\r\n:2\r\n:3\r\n

      *2\r\n+Foo\r\n-Bar\r\n"

Redis协议规范(RESP)的更多相关文章

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

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

  2. Redis协议规范(译文)

    Redis客户端使用名为RESP(Redis序列化协议)的协议与Redis服务器进行通信. 虽然该协议是专为Redis设计的,但它可以用于其他CS软件项目的通讯协议. RESP是以下几方面的考虑: 易 ...

  3. redis协议规范

    好多年前看过redis的代码,那个时候还是2.6的版本,集群和哨兵还没加入正式代码,这几年redis发展的好快.简略翻译一篇文章redis的https://redis.io/topics/protoc ...

  4. 搞懂Redis协议RESP

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

  5. 从零单排学Redis【白银】

    前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服 ...

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

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

  7. 使用 DotNetty 实现 Redis 的一个控制台应用程序

    零:Demo 跑出来的结果如图 上图说明 图中左边蓝色的命令行界面,是用windows powershell 命令行链接的. 1.打开powershell命令行界面,输入命令[telnet   127 ...

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

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

  9. mini Redis(项目 二)

    一个仿Redis的内存数据库(主要用来做命令解析)服务端,  客户端使用的开源工具 : https://dom4j.github.io/     github:https://github.com/h ...

随机推荐

  1. 通过jenkins持续集成 github中的代码到 服务器。

    前言 最近自己在探索springboot框架,了解到 jenkins 具有 自动我github 上带项目部署到 tomcat 中.于是决定先搭建一个jenkins 环境在继续研究. Jenkins简介 ...

  2. BZOJ_3427_Poi2013 Bytecomputer_DP

    BZOJ_3427_Poi2013 Bytecomputer_DP Description 给定一个{-1,0,1}组成的序列,你可以进行x[i]=x[i]+x[i-1]这样的操作,求最少操作次数使其 ...

  3. 系统的讲解 - PHP 接口签名验证

    目录 概览 常用验证 单向散列加密 对称加密 非对称加密 密钥安全管理 接口调试工具 在线接口文档 扩展 小结 概览 工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这 ...

  4. Redis in .NET Core 入门:(4) LIST和SET

    第1篇:https://www.cnblogs.com/cgzl/p/10294175.html 第2篇 String:https://www.cnblogs.com/cgzl/p/10297565. ...

  5. MySQL 复制 - 性能与扩展性的基石 4:主备切换

    一旦使用 MySQL 的复制功能,就很大可能会碰到主备切换的情况.也许是为了迭代升级服务器,或者是主库出现问题时,将一台备库转换成主库,或者只是希望重新分配容量.不过出于什么原因,都需要将新主库的信息 ...

  6. Qt之表格控件蚂蚁线

    一.蚂蚁线 摘自互动百科:在图像影像软件中表示选区的动态虚线,因为虚线闪烁的样子像是一群蚂蚁在跑,所以俗称蚂蚁线.在Poshop,After Effect等软件中比较常见. 背景:用过excel的同学 ...

  7. Ubuntu命令用法详解——curl命令

    简介: cURL(CommandLine Uniform Resource Locator)是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行.它支持文件上传和下载,所以是综合传输工 ...

  8. css属性分类介绍

    css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position ...

  9. [翻译 EF Core in Action 2.0] 查询数据库

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  10. C++结构体与排列三平台出售

    结构将不同的数据类型整合在一起构成一个新的类型,排列三平台出售(企 娥:217 1793 408)相当于数据中一条记录,比如学生结构体,整合了学好,姓名等信息.结构体的好处就是可以对这些信息进行整体管 ...