https://redis.io/topics/protocol

RESP:redis序列化协议

client-server交流

二进制安全的

网络层

client端建立tcp连接到Server port 6379,使用TCP连接

除了

  • 管道通信,一次可发送多条命令,然后等待回复
  • pub/sub

以外,是简单的request-response模型

RESP怎么使用的

client发送命令到redis server,使用字符串块的数组

server应答,根据命令的实现,返回相应的resp响应类型

在resp中,一些数据的类型是依赖数据的第一个byte:

简单字符串,reply的第一个byte是+

Errors第一个byte是-

Integers第一个byte是:

Bulk Strings 第一个byte是$

Arrys第一个byte是*

一个请求的协议中,不同的部分,使用\r\n分隔

举个Intergers的例子

reply:":1000\r\n"

数字的范围是有符号64位数字,和有符号long一样,

exists返回数字1表示存在,0不存在,incr返回incr后的数字,llen返回长度,sismember返回1表示true,0表示false

Bulk Strings

目的是表示二进制安全的String,可长达512MB

"$6\r\nfoobar\r\n" foobar

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

"$-1\r\n" 表示Null

RESP Arrays

client向server发送的是Arrays,*后面会跟一个数字,表示数组长度

"0\r\n" empty array

"
2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n" "foo" 和 "bar"

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

*3\r\n

$3\r\n

foo\r\n

$-1\r\n 空的元素

$3\r\n

bar\r\n -> ["foo",nil,"bar"]

Arrays可以糅合多种类型

高性能解析器for Redis协议

  • 使用前置长度来转换bulk data,因此不用扫描payload(有效载荷)
  • 块数据和多块数据长度可以和查找CR(\r\n)时一起获取

最新文章

  1. JS的面向对象编程一:封装
  2. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
  3. jquery获取复选框的值
  4. HDU1402 A * B Problem Plus(FFT)
  5. hdu 1233 还是畅通工程 解题报告
  6. POJ 2482 Stars in Your Window (线段树+扫描线+区间最值,思路太妙了)
  7. [转]应聘Java,jsp,j2ee软件工程师笔试中可能出现的问题
  8. 把数组排成最小的数/1038. Recover the Smallest Number
  9. 浅析ASP.NET的状态保持
  10. 在Win8.1(64位)系统上安装Scrapy(python 2.7.7)
  11. 高精度运算专题3-乘法运算(The multiplication operation)
  12. chrome地址栏命令
  13. linux 最大文件描述符
  14. .Net Core 管道中的ConfigureServices 和Configure
  15. leecode第二天-使用异或找出数组中的非重复元素
  16. svnkit https 忽略证书认证
  17. 《高性能SQL调优精要与案例解析》新书样章
  18. uva-10905-贪心
  19. 谈谈AsmJit
  20. 设计模式 笔记 适配器模式 Adapter

热门文章

  1. python环境变量的安装与配置
  2. (转载)什么是B树?
  3. Book of Shaders 04 - 网格噪声:Worley Noise
  4. 【django】本地开发media用户上传文件访问路径找不到
  5. 手把手教你AspNetCore WebApi:增删改查
  6. pytest之将多个测试用例放在一个类中,生成唯一临时文件夹
  7. Matlab绘制子图subplot使用攻略
  8. STM32F103C8T6-CubeMx串口收发程序详细设计与测试(1)——CubeMx生成初始代码
  9. Centos 6.9 安装 php5.6
  10. php数据显示在html截取字符