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)时一起获取
Redis【一】 RESP协议的更多相关文章
- Redis系列(五):Redis的RESP协议详解
一.什么是RESP Redis是Redis序列化协议,Redis客户端RESP协议与Redis服务器通信.Redis协议在以下几点之间做出了折衷: 简单的实现 快速地被计算机解析 简单得可以能被人工解 ...
- sqler sql 转rest api 源码解析(二) resp 协议
resp 协议主要是方便使用redis 客户端进行连接,resp 主要是依赖 tidwall/redcon golang redis 协议包 resp 服务说明 server_resp.go 文件,干 ...
- 一万字详解 Redis Cluster Gossip 协议
Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...
- RESP协议
RESP 是 Redis 序列化协议的简写.它是⼀种直观的⽂本协议,优势在于实现异常简单,解析性能极好. Redis 协议将传输的结构数据分为 5 种最⼩单元类型,单元结束时统⼀加上回⻋换⾏符号\r\ ...
- Redis协议规范(RESP)
Redis 即 REmote Dictionary Server (远程字典服务): 而Redis的协议规范是 Redis Serialization Protocol (Redis序列化协议) 该协 ...
- 浅谈集群版Redis和Gossip协议
昨天的文章写了关于分布式系统中一致性哈希算法的问题,文末提了一下Redis-Cluster对于一致性哈希算法的实现方案,今天来看一下Redis-Cluster和其中的重要概念Gossip协议. 1.R ...
- 用BIO手写实现Redis客户端的探究(拒绝Jedis)
在Redis的使用过程中,大多数人都是使用现成的客户端,如Jedis,Redisson,Lettuce.因此本文研究用BIO的方式手写Redis客户端尝试,对遇到的问题进行探究及总结. Redis通讯 ...
- redis 高性能的原因
1. redis 数据存储在内存中: 2. redis 是单线程: 3. redis 多路复用: 指令先放到队列里 4.redis 使用resp 协议
- Redis4.0 主从复制(PSYN2.0)
Redis4.0版本相比原来3.x版本,增加了很多新特性,如模块化.PSYN2.0.非阻塞DEL和FLUSHALL/FLUSHDB.RDB-AOF混合持久化等功能.尤其是模块化功能,作者从七年前的re ...
随机推荐
- 1.Strom-概述
- Java 实现常见内排序
一.内排序 1.排序基本概念 (1)什么是排序? 排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列.分为内排序.外排序.排序算法的好坏直接影响程序的执行速度以及存储空 ...
- Python_快速安装第三方库-pip
如何快速安装第三方库? 通过python 豆瓣园源https://pypi.douban.com/simple/进行安装,利用国内网速 如何安装? pip -i install https://pyp ...
- py004.python的逻辑运算,随机数及判断语句if,elif,else
判断语句又称 "分支语句" if判断语句的格式: if 条件1: 条件1满足时,执行的代码 -- # 前面有缩进4个空格 elif 条件2: 条件2满足时,执行的代码 -- # 前 ...
- 微服务通信之feign的注册、发现过程
前言 feign 是目前微服务间通信的主流方式,是springCloud中一个非常重要的组件.他涉及到了负载均衡.限流等组件.真正意义上掌握了feign可以说就掌握了微服务. 一.feign的使用 f ...
- 三级菜单打怪升级,young -> plus -> pro
young -> simple 三级菜单超简单,每层都是小循环 小可爱,不是if就是for,真可爱 def menu(message): print('按q返回上一层') print('按e退出 ...
- 晚间测试3 B. 单(single)
题目描述 单车联通大街小巷.这就是出题人没有写题目背景的原因. 对于一棵树,认为每条边长度为 \(1\),每个点有一个权值\(a[i]\).\(dis(u,v)\)为点\(u\)到\(v\)的最短路径 ...
- JDK1.8新特性之(一)--Lambda表达式
近期由于新冠疫情的原因,不能出去游玩,只能在家呆着.于是闲来无事,开始阅读JDK1.8的源代码.在开始之前也查询了以下JDK1.8的新特性,有针对性的开始了这段旅程. 只看不操作,也是不能心领神会的. ...
- vue拼图动画Demo
这是一个基于vue的Demo,可以实现拼图动画,但是具体的没有写拼图成功的逻辑,鼠标悬停移动.周期刷新 我把它放到的我的博客园界面上了.刷新界面可以看到. 演示地址 :https://liruilon ...
- 常见的Mysql十款高可用方案
简介 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作 ...