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 ...
随机推荐
- JVM学习目录
JVM学习目录 JVM的整体结构 1.类加载子系统 类加载子系统 2.运行时数据区 运行时数据区总览 堆.栈.方法区的详细图解 2.1.程序计数器 程序计数器 2.2.本地方法栈 本地方法栈 2.3. ...
- kafk学习笔记(一)
kafka消费模式 1.点对点模式:消费者主动拉取消息,消费之后删除数据. 2.发布/订阅模式:如果生产者推给消费者,可能会有些消费者消费比较慢,直接爆炸.或者有些消费者消费很快,资源浪费:一般是消费 ...
- Decision trees决策树
信息熵(entropy) 信息熵模型(香农Shannon's Entropy Model) 在一个随机事件中,某个事件发生的不确定度越大,熵也就越大,那我们要搞清楚所需要的信息量越 信息增益(IG,I ...
- js undefined和null的判断
function isUndef(value ){ return value === undefined || value === null; }
- 下载 Oracle Database XE 11gR2
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- TCP/IP 邮件
原文:TCP/IP 邮件 第一节:TCP/IP 简介 第二节:TCP/IP 寻址 第三节:TCP/IP 协议 第四节:TCP/IP 邮件 电子邮件是 TCP/IP 最重要的应用之一. 你不会用到... ...
- Java之格林威治时间格式转换成北京时间格式
Java之格林威治时间格式转换成北京时间格式 package com.mtons.mblog; import java.text.ParseException; import java.text.Si ...
- 设备通讯——RS232
RS232的接口有两种--一种公头.一种母头,两种头的引脚是有区别的 MAX232电路图: 注意:串口通讯需要交叉接线.
- SHOI 2014 【概率充电器】
加油,两道了,也就还剩那么二十来道吧,慢慢做...... 题目大意: 给你一颗树,树上的每一个节点都有一定的概率p[i]能冲上电,有电的点,可以通过树上的边,一定概率地将电传递到与它相邻的点,同时对于 ...
- 第2天 | 12天搞定Python,运行环境(超详细步骤)
倘若有人告诉你,他在学习Python编程,却没有安装运行环境,那你赶紧叫他滚,并离他远点,因为他在欺骗你的感情. 没有安装运行环境,程序根本无法跑起来,对错不能知根知底,试问是在学编程,还是在跟空气对 ...