Redis协议规范(RESP)
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)的更多相关文章
- Redis系列(五):Redis的RESP协议详解
一.什么是RESP Redis是Redis序列化协议,Redis客户端RESP协议与Redis服务器通信.Redis协议在以下几点之间做出了折衷: 简单的实现 快速地被计算机解析 简单得可以能被人工解 ...
- Redis协议规范(译文)
Redis客户端使用名为RESP(Redis序列化协议)的协议与Redis服务器进行通信. 虽然该协议是专为Redis设计的,但它可以用于其他CS软件项目的通讯协议. RESP是以下几方面的考虑: 易 ...
- redis协议规范
好多年前看过redis的代码,那个时候还是2.6的版本,集群和哨兵还没加入正式代码,这几年redis发展的好快.简略翻译一篇文章redis的https://redis.io/topics/protoc ...
- 搞懂Redis协议RESP
RESP (REdis Serialization Protocal) Redis客户端和服务端之间通信的协议.它很简单,建立在TCP协议上,提供简单.高性能.可读性强的数据序列化的规范和语义. 5种 ...
- 从零单排学Redis【白银】
前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服 ...
- Redis随笔(六)RESP的协议规范
1.官网文档 https://redis.io/topics/protocol http://www.redis.cn/topics/protocol.html 2.协议介绍 redis协议规范(Re ...
- 使用 DotNetty 实现 Redis 的一个控制台应用程序
零:Demo 跑出来的结果如图 上图说明 图中左边蓝色的命令行界面,是用windows powershell 命令行链接的. 1.打开powershell命令行界面,输入命令[telnet 127 ...
- Netty 源码中对 Redis 协议的实现
原文地址: haifeiWu的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 近期一直在做网络协议相关的工作,所以博客也就与之相关的比较多,今天楼主结合 Re ...
- mini Redis(项目 二)
一个仿Redis的内存数据库(主要用来做命令解析)服务端, 客户端使用的开源工具 : https://dom4j.github.io/ github:https://github.com/h ...
随机推荐
- laravel 请求request 接收参数
获取请求输入 获取所有输入值 你可以使用 all 方法以数组格式获取所有输入值: $input = $request->all(); 获取单个输入值 使用一些简单的方法,就可以从 Illumin ...
- Python数据结构应用3——链表
linked list(链表) 建立 Node 链表的基本组成就是一个个Node,每个Node都需要包括两部分内容,一部分是自身的data,另一部分是下一个Node的reference. class ...
- react VS vue 我们究竟该如何选择(从项目的角度帮你分析)
一.序言 现在web开发最火的两个框架,react和vue.听起来就感觉很牛逼的样子.确实,不得不服,创造出这2种框架的人真的是牛逼.不过更牛逼的是为这2中框架不断完善的人.一个优秀的idea,会在很 ...
- selenium IDE 使用方法整理
1.设置起始点(确定case从哪步开始执行),快捷键:S,效果图如下: 2.设置断点(case执行到添加断点处,将自动停止),快捷键:B,效果图如下: 3.设置判断点 如:百度输入ceshi,点 ...
- Vue-CLI和脚手架
但我们学习Vue时,很多教程都会说到用Vue-CLI构建项目,那么什么是脚手架?什么是Vue-CLI?为什么要用脚手架,好处在哪?以及为何我们用Vue开发项目时要用到Vue-CLI? 首先,CLI为c ...
- tomcat7支持https配置
基本环境:centos7.0 jdk1.8 tomcat7 1.下载tomcat,解压到指定目录 例如:/home/test/apache-tomcat-7.0.81 2.生成证书 首先进入J ...
- mybatis-generator自動逆向生成文件
首先在maven里面添加插件 <plugins> <plugin> <groupId>org.mybatis.generator</groupId> & ...
- 《HelloGitHub》第 32 期
公告 新加入了 2 位机器学期的小伙伴负责机器学习专栏.项目的首页增加合作组织一栏,如有开源组织有意合作可以点击联系我. 我们还在路上,不停地前行. <HelloGitHub>第 32 期 ...
- 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)
数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...
- redis缓存类
<?php class Redis_model{ public $redis = null; public function __construct() { $hosts = $this-> ...