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