为什么要用Pipeline 因为光速太慢【redis pipeline】
为什么要用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 也有局限
- 每次封装命令的个数不宜过多,不易封装耗时过多的命令,否则会增加客户端的等待时间,和网络阻塞,一些O(n)复杂度的命令,还容易使服务端阻塞。
- pipeline 只能操作一个redis实例。
为什么要用Pipeline 因为光速太慢【redis pipeline】相关推荐
- Python Redis pipeline操作(秒杀实现)
Python Redis pipeline操作(秒杀实现) 设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次. ...
- java redis pipeline,巧用 Redis pipeline 命令,解决真实的生产问题
本文转载自微信公众号「Java极客技术」,作者鸭血粉丝.转载本文请联系Java极客技术公众号. Hello,大家好,我是阿粉~ 最近阿粉接到了一个业务需求,需要开发一个业务接口,批量删除 Redis ...
- Redis: pipeline基本原理以及Jedis和Redisson的实现示例
1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令. 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O).执行命令(内存)和返回结 ...
- Redis Pipeline 原理及注意事项
Pipeline介绍 Pipeline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可. 当client 使用pipelining 发送 ...
- php redis管道,php redis pipeline怎么用 - 翟码农技术博客
网上一大堆文章都在说pipeline怎么提升性能,我只是想知道安装好phpredis库之后,代码上如何写来开启管道模式,也就是下面这一小撮代码而已.$pipe = $redis->multi(R ...
- python redis pipeline使用方法_python使用pipeline批量读写redis的方法
用了很久的redis了.随着业务的要求越来越高.对redis的读写速度要求也越来越高.正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考 ...
- python redis pipeline 堆积_Redis Pipeline python
问题 简介: 以下代码来自 redis实战 一书中某个小节; 代码是python实现,其中如果pipeline()不加任何参数,或者是pipeline(True)的形式,那么客户端将使用MULTI E ...
- php redis pipeline管道技术
概念 如果需要一次执行多个redis命令,以往的方式需要发送多次命令请求,有redis服务器依次执行,并返回结果,为了解决此类问题,设计者设计出了redis管道命令:客户端可以向服务器发送多个请求,而 ...
- SpringBoot实战(十七):Redis Pipeline 轻松实现百倍性能提升(续)
前言 最近在做业务的时候,需要批量操作Redis,虽然Redis的速度非常快,但是for循环操作Redis还是会有问题,在之前的基础上又对批量操作Redis进行了汇总: 批量操作Redis: 批量Se ...
最新文章
- 一般筛法求素数+快速线性筛法求素数
- 修改Ubuntu的启动logo
- 微信小程序获取页面栈
- 不死神兔c语言20月,不死神兔问题(斐波那契数列)
- STM32下SD卡驱动详解
- python 创建目录时间_在目录中创建带有日期时间名称和子文件的dir(Python)
- java ee maven_针对新手的Java EE7和Maven项目–第8部分
- 微软发动图明示新一代操作系统Windows 11
- Hibernate性能优化之EHCache缓存
- Spark:windows下配置spark开发环境
- python主流编程语言_目前主流的编程语言有哪些?
- uefi linux开发环境,UEFI开发学习1 - Ubuntu下搭建UDK2018开发环境
- android 高德地图简书,Android高德之旅(4)我的位置
- ios 销毁当前页面重新开启_iOS - 切换rootViewController时,销毁之前的控制器
- 2021-01-01 中国公务员级别
- 解决虚拟机中桥接模式下ip地址的设置
- 湖南农业大学有计算机应用,计算机应用基础复习资料–湖南农业大学.doc
- 程序员福利---免费接口
- 【人脸识别(三)】:使用face_recognition库实现人脸识别,python实现
- 易语言教程数据库替换