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 原理及注意事项相关推荐

  1. redis核心原理与设计思想

    redis核心原理与设计思想 一.redis的5种基本数据结构 1.String(字符串) redis字符串扩容策略 2.list(列表) list常用命令 右边进左边出:队列 右边进右边出:栈 快速 ...

  2. redis事务原理,使用,详解

    声明:本博客内容来自<Redis深度历险>一书        为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis 也不例外.Redis 的事务使用非常简单,不同于 ...

  3. java redis pipeline,巧用 Redis pipeline 命令,解决真实的生产问题

    本文转载自微信公众号「Java极客技术」,作者鸭血粉丝.转载本文请联系Java极客技术公众号. Hello,大家好,我是阿粉~ 最近阿粉接到了一个业务需求,需要开发一个业务接口,批量删除 Redis ...

  4. 全面剖析Redis Cluster原理和应用

    全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最 ...

  5. Redis: pipeline基本原理以及Jedis和Redisson的实现示例

    1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令. 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O).执行命令(内存)和返回结 ...

  6. Redis核心原理与应用实践

    Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂 ...

  7. php redis管道,php redis pipeline怎么用 - 翟码农技术博客

    网上一大堆文章都在说pipeline怎么提升性能,我只是想知道安装好phpredis库之后,代码上如何写来开启管道模式,也就是下面这一小撮代码而已.$pipe = $redis->multi(R ...

  8. Python Redis pipeline操作(秒杀实现)

    Python Redis pipeline操作(秒杀实现) 设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次. ...

  9. 测试原理_OTDR测试原理及注意事项

    1.OTDR测试原理 OTDR 是 Optical Time Domain Reflectometer 的英文缩写 ,即光时域反射仪.它应用于各种光通信网络的测试 ,包括测试光纤传输系统中的接头损耗. ...

最新文章

  1. 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(1)
  2. Linux系统守护进程详解
  3. python基础知识面试题-基础篇--【python】面试题汇总
  4. DDoS高防服务如何选择?
  5. Linux系统中ctrl+c、 ctrl+z、 ctrl+\ 产生的信号名称
  6. CentOS iso镜像文件做本地源
  7. 南华大学java补考_关于2017年秋季学期学生补考报名及成绩复核的通知
  8. 批改网禁止粘贴怎么破_教育部对家长批改作业表态了,明令禁止!你怎么看?...
  9. 更改IE浏览器的收藏夹位置
  10. c语言多线程怎么写,如何用C语言实现多线程
  11. zabbix监控mysql内存_zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数...
  12. 首届 “女生科技体验节” 大爆料!
  13. 学c语言前要了解什么软件,学习c语言需要什么软件?
  14. 超详细的Latex快速基础入门 (第二节)【关于latex命令的一些知识】
  15. 5千字长文:KeePass完全入门指南(附已经配置好的版本)
  16. C++ 在 windows vscode 上使用 utf-8
  17. Sublime Text 3 快捷实现文件在浏览器中打开
  18. 对互联网VC的10点看法
  19. cmd命令下修复硬盘/U盘
  20. VisualStudio各个版本彻底干净卸载

热门文章

  1. MATLAB算法实战应用案例精讲-【图像处理】数字图像灰度化(附Java、python、matlab和opencv代码实现)
  2. 微信公众号上的一次爬虫
  3. QC协议+华为FCP+三星AFC快充取电5V9V芯片XSQ07应用
  4. 第五阶段 -- 数据库:day21_07/03/19【事务】
  5. python之励志公式
  6. 使用 Print-js 实现打印、预览功能 前端部分
  7. html图片边框左右消失,图片边框border-image的用法
  8. c++switch用法
  9. android 各种高级素材使用
  10. html 获得div的高度,如何用js获取div不确定的自适应高度(currentStyle与offsetHeight)...