redis[0] 通讯报文协议

原创 2016年05月31日 17:22:35

据说redis很牛逼,一直很想拜读下,今天终于开始行动了,希望自己能坚持下去;

下面是一些学习redis的通讯协议的笔记
学习材料:http://redis.io/topics/protocol [redis官网文档]

1、redis 中通讯协议是 RESP(REdis Serialization Protocol)
协议的设计原则:简单、解析速度快、易读(这里指的是对于人类来说可读性强,对象是人,不是机器)

2、RESP 是一种二进制安全的

3、协议中总共定义了五种数据类型:Simple Strings、Errors 、Integers 、Bulk Strings、Arrays
在协议中这五种数类型分别由五个符号代表
Simple Strings ————————– ‘+’
Errors ————————– ‘-’
Integers ————————– ‘:’
Bulk Strings ————————– ‘$’
Arrays ————————– ‘*’

4、每种数据的第一个字符就是其对应类型的符号

5、所有值都以 “\r\n” (CRLF) 结尾

下面分别说明这五种数据类型:
Simple Strings (‘+’) : 一个以 ‘+’开始,CRLF 结束的串,主要中间的值不能包含 结束符CR、LF
如:”+OK\r\n”

Errors(‘-‘) : 一个以 ‘-‘开始,CRLF 结束的串,主要中间的值不能包含 结束符CR、LF,值是错误信息
如:”-Error message\r\n”

Integers( ‘:’):一个以 ‘:’开始,CRLF 结束的串,值是一个 64 位的整数
如:”:1000\r\n”

Bulk Strings(‘$’):格式: ‘$’ + len + “\r\n” + val + “\r\n”
如:”$6\r\nfoobar\r\n” 表示值 “foobar”

Arrays( ‘*’) : 格式: ‘*’ + count + “\r\n” + count个值
其中这个值可以是RDSP五种数据中的任意一种
如:
“*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n”
“*2\r\n*3\r\n:1\r\n:2\r\n:3\r\n*2\r\n+Foo\r\n-Bar\r\n”

特殊情况:
空值有两种表示方法:”*-1\r\n” “$-1\r\n”
由于Arrays里面的元素可能又是一个Arrays,解析的时候需要注意

6、redis大多数情况下都是 请求-应答模式
当然有两个特殊情况:
发布订阅 ———– 客户端订阅之后,有人发布相应channel消息的时候,服务端直接推给客户端
多命令请求 ———– 对个命令请求,会分多个结果一起回来

redis的数据存储形式

redis的数据存储方式 redis 提供持久化功能,把数据以文件的方式持久化到硬盘中,但是目前大多都是redis配合关系数据库使用,持久化仍然由关系数据完成,redis自身的持久化用于保证数据...
  • weiwenjuan0923
  • weiwenjuan0923
  • 2016年09月25日 23:09
  • 2447

redis[0] 通讯报文协议

据说redis很牛逼,一直很想拜读下,今天终于开始行动了,希望自己能坚持下去;下面是一些学习redis的通讯协议的笔记 学习材料:http://redis.io/topics/protocol [r...
  • yixinkewen
  • yixinkewen
  • 2016年05月31日 17:22
  • 302

Redis源码学习之【命令协议格式】

介绍 本来这篇要介绍Redis的命令解析的,但是要想对Redis的命令解析有更直观的了解,必须先了解Redis的命令协议格式。 源码 暂无(或者是是在network.c中吧) 分析 Requ...
  • qqyanchong
  • qqyanchong
  • 2013年03月18日 14:09
  • 3544

Redis 通讯协议分析

1.协议简介 Redis的客户端与服务端采用一种叫做 RESP(REdis Serialization Protocol) 的网络通信协议交换数据。 这种协议采用明文传输,易读也易解析。Redis客...
  • Loydia
  • Loydia
  • 2016年11月11日 16:32
  • 92576

Redis-客户端通讯协议

Redis-客户端通讯协议 一.概述 1.客户端与服务端的通讯协议是建立在TCP协议之上构建的 2.Redis指定了RESP(Redis SerializationProtocol,Redis序列化协...
  • sunhuiliang85
  • sunhuiliang85
  • 2017年07月13日 10:07
  • 682

Redis源码解析:14Redis服务器与客户端间的交互

Redis服务器是典型的一对多服务器程序,通过使用由IO多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信。            ...
  • gqtcgq
  • gqtcgq
  • 2016年04月09日 17:07
  • 4170

redis

一、 环境搭建1.简介redis是一个开源的key-value数据库。 它又经常被认为是一个数据结构服务器。因为它的value不仅包括基本的 string 类型还有 list, set ,sorted...
  • qishao1101
  • qishao1101
  • 2017年06月13日 14:25
  • 297

mysql协议学习(二)--报文格式

mysql报文格式学习
  • d6619309
  • d6619309
  • 2015年08月06日 22:39
  • 1958

IEC102报文详解(电力规约)

IEC102 应用报文分6大类:通讯连接,读时钟,读历史数据,读实时数据,读事件信息,对时。详解如下: 报文格式一览 字节序号 字节内容 说明 ...
  • Akkoo
  • Akkoo
  • 2012年03月02日 14:52
  • 4080

redis 统一通讯协议 返回结果格式 请求命令格式

http://www.redis.cn/topics/protocol.html#multi-bulk-reply
  • pzqingchong
  • pzqingchong
  • 2016年12月27日 15:51
  • 356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis[0] 通讯报文协议
举报原因:
原因补充:

(最多只允许输入30个字)