为什么要用Pipeline 因为光速太慢

这不是一个噱头,我们考虑一下一种极端的情况,我们有一台内存很大服务器在北京,为其他服务提供数据。我们又在广东买了一台应用服务器来访问北京的redis服务器。这种情况是有可能存在的吧,先上一张图

这里我们姑且按照直线距离为 1800公里来算,光速按照无损的 300000km/s 每秒

  • 首先,redis客户端(广东)发送一条命令到 redis服务端(北京),然后redis服务端返回数据到redis客户端,这个过程有个很专业的称呼叫做RTT(Round Trip Time 往返时间)。

  • 然后我们算一下 时间,1800*2 / 300000 = 0.012秒 也就是 12毫秒。

  • 1000/12 = 83.3 ,也就是一秒钟redis只能读取 83次数据。

  • 这我们不去计算redis的响应时间,但是光纤的传输是有损耗的,姑且按照光纤速度 = 2/3 光速
    那么一次RTT时间为 18毫米,一秒钟只能访问 55次。

  • 而Redis官方给出的读写速度为 10万/秒 ,是不是大相径庭,因此光速太慢,并非噱头。

pipeline 多带走些,多带回些

pipeline 管道可以将一组redis 命令进行封装,一次性将多个命令传输到redis服务端,并将数据一次性带回。
这样pipeline 可以通过一次RTT ,将多个数据带回,减少了数据传输的RTT消耗。


redis 的命令执行是微妙级别的,相对于redis 网络的速度并跟不上,因此才有了redis的性能瓶颈在网络的说法。并且事实上网络确实已经是redis的性能瓶颈之一。

可以使用Pipeline模拟出批量操作的效果, 但是在使用时要注意它与原生批量命令的区别, 具体包含以下几点:
  • 原生批量命令是原子的, Pipeline是非原子的。
  • 原生批量命令是一个命令对应多个key, Pipeline支持多个命令。
  • 原生批量命令是Redis服务端支持实现的, 而Pipeline需要服务端和客户端的共同实现。

pipeline 也有局限

  1. 每次封装命令的个数不宜过多,不易封装耗时过多的命令,否则会增加客户端的等待时间,和网络阻塞,一些O(n)复杂度的命令,还容易使服务端阻塞。
  2. pipeline 只能操作一个redis实例。

为什么要用Pipeline 因为光速太慢【redis pipeline】相关推荐

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

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

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

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

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

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

  4. Redis Pipeline 原理及注意事项

    Pipeline介绍 Pipeline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可. 当client 使用pipelining 发送 ...

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

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

  6. python redis pipeline使用方法_python使用pipeline批量读写redis的方法

    用了很久的redis了.随着业务的要求越来越高.对redis的读写速度要求也越来越高.正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考 ...

  7. python redis pipeline 堆积_Redis Pipeline python

    问题 简介: 以下代码来自 redis实战 一书中某个小节; 代码是python实现,其中如果pipeline()不加任何参数,或者是pipeline(True)的形式,那么客户端将使用MULTI E ...

  8. php redis pipeline管道技术

    概念 如果需要一次执行多个redis命令,以往的方式需要发送多次命令请求,有redis服务器依次执行,并返回结果,为了解决此类问题,设计者设计出了redis管道命令:客户端可以向服务器发送多个请求,而 ...

  9. SpringBoot实战(十七):Redis Pipeline 轻松实现百倍性能提升(续)

    前言 最近在做业务的时候,需要批量操作Redis,虽然Redis的速度非常快,但是for循环操作Redis还是会有问题,在之前的基础上又对批量操作Redis进行了汇总: 批量操作Redis: 批量Se ...

最新文章

  1. 一般筛法求素数+快速线性筛法求素数
  2. 修改Ubuntu的启动logo
  3. 微信小程序获取页面栈
  4. 不死神兔c语言20月,不死神兔问题(斐波那契数列)
  5. STM32下SD卡驱动详解
  6. python 创建目录时间_在目录中创建带有日期时间名称和子文件的dir(Python)
  7. java ee maven_针对新手的Java EE7和Maven项目–第8部分
  8. 微软发动图明示新一代操作系统Windows 11
  9. Hibernate性能优化之EHCache缓存
  10. Spark:windows下配置spark开发环境
  11. python主流编程语言_目前主流的编程语言有哪些?
  12. uefi linux开发环境,UEFI开发学习1 - Ubuntu下搭建UDK2018开发环境
  13. android 高德地图简书,Android高德之旅(4)我的位置
  14. ios 销毁当前页面重新开启_iOS - 切换rootViewController时,销毁之前的控制器
  15. 2021-01-01 中国公务员级别
  16. 解决虚拟机中桥接模式下ip地址的设置
  17. 湖南农业大学有计算机应用,计算机应用基础复习资料–湖南农业大学.doc
  18. 程序员福利---免费接口
  19. 【人脸识别(三)】:使用face_recognition库实现人脸识别,python实现
  20. 易语言教程数据库替换

热门文章

  1. Arduino用esp8266WiFi模块连接到服务器
  2. 外循环与内循环的分析演示
  3. 爬虫小例--爬药监局(上)
  4. MySQL中的sum的用法----统计
  5. 抓包工具Fiddler的使用教程(十二)下:Fiddler抓取HTTPS
  6. 网易雷火9.18笔试题
  7. Python俄罗斯方块
  8. 【产业互联网周报】半导体并购潮持续爆发:Marvell100亿美元收购Inphi;Canalys报告:三季度全球云市场增长33%...
  9. 45度角Tile地图通过具体位置获得地图的行列数详解
  10. Back Office和Front Office的含义很应用