Redis Pipeline 原理及注意事项
Pipeline介绍
Pipeline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可。
当client 使用pipelining 发送命令时,redis server必须将部分请求放到队列中(使用内存),执行完毕后一次性发送结果,如果发送的命令很多的话,建议对返回的结果加标签,当然这也会增加使用的内存。
Redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的。 由于网络开销延迟,就算redis server端有很强的处理能力,也会由于收到的client消息少,而造成吞吐量小。
Pipeline在某些场景下非常有用,比如有多个command需要被'及时的'提交,而且他们对相应结果没有互相依赖,对结果响应也无需立即获得,那么pipeline就可以充当这种'批处理'的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP连接中减少了'交互往返'的时间。
Pipeline 与批量操作比较
命令 |
N个命令操作 |
1次pipeline(n个命令) |
总时间 |
n次网络交互时间 + n次命令执行时间 |
1次网络交互时间+n次命令执行时间 |
数据量 |
1条命令 |
n条命令 |
假如有1万次操作,一次网络交互的时长为5ms,一次命令执行时长为0.1ms
批量操作所需总时长为:5*10000 + 0.1*10000 = 51秒 #不考虑返回数据量大小的情况
pipeline(每次100)所需要总时长为:5*(10000/100) + 0.1*10000 = 1.5秒 #不考虑返回数据量大小的情况
pipeline与原生的M操作的区别
M 操作也是类似 pipeline,将多个命令一次执行,一次发送出去,节省网络时间。对比如下:
1.M操作在Redis队列中是一个原子操作,pipeline不是原子操作
2.pipeline与M操作都会将数据顺序的传送顺序地返回(redis 单线程)
3.M 操作一个命令对应多个键值对,而Pipeline是多条命令
pipeline注意事项
1.每次pipeline携带数量不推荐过大,否则会影响网络性能;
2.pipeline每次只能作用在一个Redis节点上;
适用场景
有些系统可能对可靠性要求很高,每次操作都需要立马知道这次操作是否成功,是否数据已经写进redis了,那这种场景就不适合。有的系统,可能是批量的将数据写入redis,允许一定比例的写入失败,那么这种场景就可以使用了,比如10000条一下进入redis,可能失败了2条无所谓,后期有补偿机制就行了,比如短信群发这种场景,如果一下群发10000条,按照第一种模式去实现,那这个请求过来,要很久才能给客户端响应,这个延迟就太长了,如果客户端请求设置了超时时间5秒,那肯定就抛出异常了,而且本身群发短信要求实时性也没那么高,这时候用pipeline最好了。
Redis Pipeline 原理及注意事项相关推荐
- redis核心原理与设计思想
redis核心原理与设计思想 一.redis的5种基本数据结构 1.String(字符串) redis字符串扩容策略 2.list(列表) list常用命令 右边进左边出:队列 右边进右边出:栈 快速 ...
- redis事务原理,使用,详解
声明:本博客内容来自<Redis深度历险>一书 为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis 也不例外.Redis 的事务使用非常简单,不同于 ...
- java redis pipeline,巧用 Redis pipeline 命令,解决真实的生产问题
本文转载自微信公众号「Java极客技术」,作者鸭血粉丝.转载本文请联系Java极客技术公众号. Hello,大家好,我是阿粉~ 最近阿粉接到了一个业务需求,需要开发一个业务接口,批量删除 Redis ...
- 全面剖析Redis Cluster原理和应用
全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...
- Redis: pipeline基本原理以及Jedis和Redisson的实现示例
1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令. 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O).执行命令(内存)和返回结 ...
- Redis核心原理与应用实践
Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂 ...
- php redis管道,php redis pipeline怎么用 - 翟码农技术博客
网上一大堆文章都在说pipeline怎么提升性能,我只是想知道安装好phpredis库之后,代码上如何写来开启管道模式,也就是下面这一小撮代码而已.$pipe = $redis->multi(R ...
- Python Redis pipeline操作(秒杀实现)
Python Redis pipeline操作(秒杀实现) 设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次. ...
- 测试原理_OTDR测试原理及注意事项
1.OTDR测试原理 OTDR 是 Optical Time Domain Reflectometer 的英文缩写 ,即光时域反射仪.它应用于各种光通信网络的测试 ,包括测试光纤传输系统中的接头损耗. ...
最新文章
- 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(1)
- Linux系统守护进程详解
- python基础知识面试题-基础篇--【python】面试题汇总
- DDoS高防服务如何选择?
- Linux系统中ctrl+c、 ctrl+z、 ctrl+\ 产生的信号名称
- CentOS iso镜像文件做本地源
- 南华大学java补考_关于2017年秋季学期学生补考报名及成绩复核的通知
- 批改网禁止粘贴怎么破_教育部对家长批改作业表态了,明令禁止!你怎么看?...
- 更改IE浏览器的收藏夹位置
- c语言多线程怎么写,如何用C语言实现多线程
- zabbix监控mysql内存_zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数...
- 首届 “女生科技体验节” 大爆料!
- 学c语言前要了解什么软件,学习c语言需要什么软件?
- 超详细的Latex快速基础入门 (第二节)【关于latex命令的一些知识】
- 5千字长文:KeePass完全入门指南(附已经配置好的版本)
- C++ 在 windows vscode 上使用 utf-8
- Sublime Text 3 快捷实现文件在浏览器中打开
- 对互联网VC的10点看法
- cmd命令下修复硬盘/U盘
- VisualStudio各个版本彻底干净卸载
热门文章
- MATLAB算法实战应用案例精讲-【图像处理】数字图像灰度化(附Java、python、matlab和opencv代码实现)
- 微信公众号上的一次爬虫
- QC协议+华为FCP+三星AFC快充取电5V9V芯片XSQ07应用
- 第五阶段 -- 数据库:day21_07/03/19【事务】
- python之励志公式
- 使用 Print-js 实现打印、预览功能 前端部分
- html图片边框左右消失,图片边框border-image的用法
- c++switch用法
- android 各种高级素材使用
- html 获得div的高度,如何用js获取div不确定的自适应高度(currentStyle与offsetHeight)...