当前位置:网站首页>Redis入门完整教程:Pipeline
Redis入门完整教程:Pipeline
2022-07-04 22:29:00 【谷哥学术】
3.3.1 Pipeline概念
Redis客户端执行一条命令分为如下四个过程:
1)发送命令
2)命令排队
3)命令执行
4)返回结果
其中1)+4)称为Round Trip Time(RTT,往返时间)。
Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但
大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有
mhgetall命令存在,需要消耗n次RTT。Redis的客户端和服务端可能部署在不
同的机器上。例如客户端在北京,Redis服务端在上海,两地直线距离约为
1300公里,那么1次RTT时间=1300×2/(300000×2/3)=13毫秒(光在真空中
传输速度为每秒30万公里,这里假设光纤为光速的2/3),那么客户端在1秒
内大约只能执行80次左右的命令,这个和Redis的高并发高吞吐特性背道而
驰。
Pipeline(流水线)机制能改善上面这类问题,它能将一组Redis命令进
行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序
返回给客户端,图3-5为没有使用Pipeline执行了n条命令,整个过程需要n次
RTT。
图3-6为使用Pipeline执行了n次命令,整个过程需要1次RTT。
Pipeline并不是什么新的技术或机制,很多技术上都使用过。而且RTT
在不同网络环境下会有不同,例如同机房和同机器会比较快,跨机房跨地区
会比较慢。Redis命令真正执行的时间通常在微秒级别,所以才会有Redis性
能瓶颈是网络这样的说法。
redis-cli的--pipe选项实际上就是使用Pipeline机制,例如下面操作将set
hello world和incr counter两条命令组装:
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\
n$7\r\ncounter\r\n' | redis-cli --pipe
但大部分开发人员更倾向于使用高级语言客户端中的Pipeline,目前大
部分Redis客户端都支持Pipeline,第4章我们将介绍如何通过Java的Redis客
户端Jedis使用Pipeline功能。
3.3.2 性能测试
表3-1给出了在不同网络环境下非Pipeline和Pipeline执行10000次set操作
的效果,可以得到如下两个结论:
·Pipeline执行速度一般比逐条执行要快。
·客户端和服务端的网络延时越大,Pipeline的效果越明显。
因测试环境不同可能得到的具体数字不尽相同,本测试Pipeline每次携
带100条命令。
3.3.3 原生批量命令与Pipeline对比
可以使用Pipeline模拟出批量操作的效果,但是在使用时要注意它与原
生批量命令的区别,具体包含以下几点:
·原生批量命令是原子的,Pipeline是非原子的。
·原生批量命令是一个命令对应多个key,Pipeline支持多个命令。
·原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端和客户
端的共同实现。
3.3.4 最佳实践
Pipeline虽然好用,但是每次Pipeline组装的命令个数不能没有节制,否
则一次组装Pipeline数据量过大,一方面会增加客户端的等待时间,另一方
面会造成一定的网络阻塞,可以将一次包含大量命令的Pipeline拆分成多次
较小的Pipeline来完成。
Pipeline只能操作一个Redis实例,但是即使在分布式Redis场景中,也可
以作为批量操作的重要优化手段,具体细节见第11章。
边栏推荐
- Lost in the lock world of MySQL
- Shell 脚本实现应用服务日志入库 Mysql
- Deployment of JVM sandbox repeater
- MySQL Architecture - logical architecture
- The sandbox has reached a cooperation with digital Hollywood to accelerate the economic development of creators through human resource development
- Unity修仙手游 | lua动态滑动功能(3种源码具体实现)
- MD5 tool class
- SPSS installation and activation tutorial (including network disk link)
- Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
- About stack area, heap area, global area, text constant area and program code area
猜你喜欢
Attack and defense world misc advanced area Hong
【室友用一局王者荣耀的时间学会了用BI报表数据处理】
Redis的持久化机制
攻防世界 MISC 进阶区 hit-the-core
[Yugong series] go teaching course 003-ide installation and basic use in July 2022
Close system call analysis - Performance Optimization
The overview and definition of clusters can be seen at a glance
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
How to send a reliable request before closing the page
攻防世界 MISC 進階區 Erik-Baleog-and-Olaf
随机推荐
9 - 类
2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import “fmt“ func main() { fmt.Pri
In Linux, I call odspcmd to query the database information. How to output silently is to only output values. Don't do this
PMO: compare the sample efficiency of 25 molecular optimization methods
剑指Offer 68 - II. 二叉树的最近公共祖先
攻防世界 MISC 进阶区 hit-the-core
Breakpoint debugging under vs2019 c release
Alibaba launched a new brand "Lingyang" and is committed to becoming a "digital leader"
常用技术指标之一文读懂BOLL布林线指标
【OpenGL】笔记二十九、抗锯齿(MSAA)
It is said that software testing is very simple, but why are there so many dissuasions?
The difference between Max and greatest in SQL
浅聊一下中间件
Business is too busy. Is there really no reason to have time for automation?
【烹饪记录】--- 青椒炒千张
Sword finger offer 67 Convert a string to an integer
Solana chain application crema was shut down due to hacker attacks
攻防世界 MISC 进阶区 Erik-Baleog-and-Olaf
Recommendation of mobile app for making barcode
繁華落盡、物是人非:個人站長該何去何從