Redis 管道(Pipeline)是什么?有什么用?

news2024/11/16 3:14:32

目录

1. redis 客户端-服务端模型的不足之处

2. redis 管道是什么?有什么好处?

3. 管道的使用场景

4. 管道使用的注意事项


1. redis 客户端-服务端模型的不足之处

众所周知,redis 是一个客户端-服务端的模型设计,客户端向服务端发送存储数据的请求共分为四步(发送命令——>命令排队——>命令执行——>返回结果),简单来说就是一问一答的交互方式,在等待返回结果的期间,通常是以阻塞的模式等待服务端响应。

举个例子,我使用 set 命令存放3个数据,实际上是与 redis 交互了三次。

127.0.0.1:6379> set user1 aaa
OK
127.0.0.1:6379> set user2 bbb
OK
127.0.0.1:6379> set user3 ccc
OK

首先:客户端发送 set user1 aaa 命令;

其次:该命令开始排队等待被执行;

然后:开始执行当前命令;

最后:客户端等待命令执行返回的结果;

这样做是有有个很大的缺点的,那就是频繁交互会比较耗费性能,每执行一条命令,就需要客户端和服务端进行一次交互,而且还会阻塞等待。一旦出现高并发的场景,每秒钟都会有上千上万次的数据请求,频繁调用系统的IO资源发送网络请求,会对系统资源造成浪费,redis 的性能就会因为频繁的交互而大打折扣。

也许有些朋友会说,我可以使用 mset 命令,一次完成上述散步存放操作,如下,使用 mset 命令就可以一次存放 user1,user2,user3 三条数据,降低了交互次数提高了效率。

但是,mset 命令只能用于 String 类型数据的存储,如果换成hset,就会报错,所以不难看出,mset 命令是有一定的局限性的。

127.0.0.1:6379> mset user1 aaa user2 bbb user3 ccc
OK
127.0.0.1:6379> mset user4 ddd hset k1 v1 k2 v2
(error) ERR wrong number of arguments for 'mset' command

所以,为了解决频繁数据交互导致 redis 性能下降,就有了管道(Pipeline)。

2. redis 管道是什么?有什么好处?

管道本身不难理解,像我们日常生活中遇到的水管,天然气管,都是用来传输特定的东西的。类比到 Redis 中,Redis管道就是用来批量传输命令的。

redis 管道的本质其实是一个队列,用一句话来说它可以批次处理多条命令;将两个,三个,甚至N个命令合成一个,一块打包交给 Redis 服务器,让 Redis 服务器一起执行这些命令。可以类似的理解为 Redis 原生批命令 "mset","mget" 。

管道的好处:

(1)将原本需要多步完成的数据交互操作一次完成,提高了数据的处理效率;

(2)显著减少了客户端与服务器之间的网络通信次数,尤其是对于需要执行大量命令的场景,能够极大的降低网络延迟带来的影响;

3. 管道的使用场景

Pipeline主要适用于需要对 Redis 执行大量命令的操作,例如数据批量导入,大规模数据更新,复杂查询等。这些耗时操作如果不使用管道将会使整体执行时间显著增加,降低了服务器的响应速度。

对于涉及事务(translaction)的操作,虽然也可以使用Pipeline来打包命令,但需要注意的是,Pipeline不提供事务的原子性和一致性。如果有明确需求要确保一组命令作为一个原子单位执行,建议使用 Redis 提供的MULTI/EXEC 命令来开启事务。

4. 管道使用的注意事项

(1)分批处理:虽然 Pipeline 能够显著提高命令的执行效率,但一次性发送的命令数量也不宜过大,否则可能会导致数据包过大进而对网络传输造成较大压力,但是,如果发送的请求量过于庞大,Redis 也是会分多批次发送的。举个例子,加入我现在有一个客户端连接,要发送30K条数据进行存储,Redis 无法将30K条数据一次性接收处理,这个时候就会将30K条数据分三次进行发送,每次发送10K,而 Redis 在处理过后,也会分三次进行返回告知数据已经处理完毕。

(2)响应顺序:Redis服务器会按接收到命令的顺序返回结果。即使在Pipeline中并发发送多个命令,客户端接收到的响应也将按照命令发送的顺序排列。

(3)使用方式:实际开发过程中,由于内存,网络等各种因素的影响,管道的使用方式也是灵活多变的。常见的有服务端攒批和客户端攒批两种方式。

服务端攒批,这种也可以直接借助于服务端提供的事务支持指令来完成。

客户端存储大量数据操作,批次发送给服务端,服务端会按照顺序在短时间内处理大量请求。

(4)故障处理:如果Pipeline中的某个命令执行失败(如语法错误、key不存在等),后续命令通常仍会继续执行。错误信息会包含在相应命令的响应中,客户端可以根据这些信息判断哪些命令执行成功,哪些失败。

(5)异步操作:Redis 管道中的所有命令是在服务器端按顺序执行的,但客户端与服务器之间的通信是批量进行的,客户端可以在发送完一批命令后立刻开始处理其他任务,无需等待每个命令的单独响应。这种异步处理方式可以更好地利用客户端的计算资源,提高整体应用程序的并发性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树莓派0 2W重启后突然没有声音

树莓派0 2W重启后突然没有声音。 最近在使用该板卡。重启后突然出现了显示器不能显示界面的情况,接着用putty的ssh方式连接该板卡,能连上。使用vnc方式连接该板卡,也能连上。后来通过修改/boot/config.txt文件,能在显示器上显示界…

WordPress付费进群V2主题,多种引流方法,引私域二次变现

全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也是如此随机刷新不重复 进群页面简介,群聊名称,群内展示&…

2024年小米SU7维修手册和电路图线路图接线图资料更新

此次更新了2024年小米SU7维修手册和电路图资料,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等! 汽修帮…

ctfshow-web入门-命令执行(web119、web120、web121、web122)

目录 1、web119 2、web120 3、web121 4、web122 1、web119 采用 118 的 payload,回显 evil input,说明新增了过滤 单独测试一下,是 PATH 、BASH 被过滤了 在上一题的基础上,我们再介绍一个内置变量:$RANDOM 它会…

用Python轻松转换Markdown文件为PDF文档

Markdown,以其简洁的语法和易于阅读的特性,成为了许多作家、开发者和学生记录思想、编写教程或撰写报告的首选格式。然而,在分享或打印这些文档时,Markdown的纯文本形式可能无法满足对版式和布局的专业需求。而将Markdown转换为PD…

mac 上 Docker Desktop的免费开源的替代工具Colima

当谈到在macOS上运行容器时,Docker长期以来一直是首选。但是,必须解决使用适用于macOS的Docker Desktop时出现的一些限制,特别是对于大中型公司,最大的问题是需要购买许可证。另外,macOS 版Docker Desktop的性能问题也…

Go语言实现钉钉机器人接入Dify工作流

go语言实现实现钉钉机器人接入dify工作流,完成ai 流式问答 代码地址 有用的话点个star github地址 效果 配置使用 修改.env_template文件 为.env 设置.env文件内的环境变量 API_KEY: dify的api_keyAPI_URL: dify 的api接口CLIENT_ID : 钉钉机器人应用的idCLIENT…

护眼指南之适合学生写作业的台灯:看看学生护眼台灯哪个品牌好

随着人们健康意识的提高,越来越多的人开始关注眼睛的健康问题,照明技术的进步也为缓解眼疲劳提供了可能,现在的照明产品可以通过调整光线亮度、色温、频闪等参数,使光线更加柔和、均匀,减少眼睛的不适感。人们都希望通…

孕产妇健康管理信息平台,多家医院产科广泛运用,系统稳定,功能齐全 产科管理系统源码,三甲医院产科电子病历系统成品源代码

孕产妇健康管理信息平台,多家医院产科广泛运用,系统稳定,功能齐全 产科管理系统源码,三甲医院产科电子病历系统成品源代码 女性生育过程会面临许多的困难和问题,需要经常性地前往医院做详细的身心检查,在…

【python】Data Augmentation

参考学习来自:使用PythonOpenCV进行数据增广方法综述(附代码演练) 文章目录 Random CutCutoutColor JitterAdd Noisy Random Cut 随机裁剪图片中的长款缩放为 scale 倍的区域,resize 到原图大小,bounding box 的坐标也…

6域名系统DNS

《计算机网络》第7版,谢希仁 每次记不清楚的知识点,通过上网查找,总是只能看到很零碎的答案。最后还是最喜欢看这个版本的书,一看就回忆起来了,逻辑严谨,循循善诱,知识讲解的全面又清晰&#xf…

Elasticsearch:结合稀疏、密集和地理字段

作者:来自 Elastic Madhusudhan Konda 如何以自定义方式组合多个稀疏、密集和地理字段 Elasticsearch 是一款强大的工具,可用于近乎实时地搜索和分析数据。作为开发人员,我们经常会遇到包含各种不同字段的数据集。有些字段是必填字段&#x…

Cartoon UI(游戏卡通UI图标界面按钮框架)

卡通UI是一套完整的艺术UI组件,图标,按钮,将非常适合你的游戏项目。 所有组件都是高质量的,在专业水平上实现,并具有透明的背景,因此您可以将其放置在任何需要的表面上。 卡通UI包括: -按钮&…

VIO(Virtual_Input_Output) IP 使用笔记

VIO(Virtual Input/Output)IP 核,即虚拟输入输出 IP,可以通过调试界面模拟 IO 的变化,这可以在板子没有按键等外设、或外设不足的情况下,来模拟外部输入。然而网上关于 VIO 的教程都说的不是很清楚&#xf…

如何学习大型语言模型中的量化

前言 图片来自作者:Flow 展示了量化的必要性。(笑脸和生气脸图片来自Yan Krukau) 在我解释上面的图表之前,让我先介绍一下您将在本文中学习的重点内容。 首先,您将了解量化是什么以及为什么量化。接下来,您将深入了解…

sssssssssssssssshare_ptrrrrrrrrrrrrrrrrrrrrrrrrr

智能指针——shared_ptr的原理及仿写 shared_ptr的原理及仿写 共享指针允许多个指针指向同一份数据,因为它使用了引用计数,每多一个指针指向这个数据,引用技术加一,每销毁一个指针,引用技术减一,如果引用计…

【 2024!深入了解 大语言模型(LLM)微调方法(总结)】

引言 众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&…

助力企业数字化转型:无锡哲讯——您的专业SAP系统运维服务商

数字化时代,企业对SAP系统的依赖程度日益加深,而SAP系统的稳定运行对于企业的核心业务至关重要。 无锡哲讯作为专业的SAP运维服务商,致力于为客户提供全面的SAP运维解决方案,助力企业实现数字化转型,提升核心竞争力。 …

再次登榜,深兰科技荣膺全球独角兽企业500强

6月27~28日,《2024全球独角兽企业500强》榜单发布,深兰科技凭借在AI产业赋能和产品出海方面的出色表现,继2023年之后再次登榜。 《2024全球独角兽企业500强》评委会介绍,本届榜单的产生,是由“全球独角兽企…

logback log.info耗时异常,RollingFileAppender+TimeBasedRollingPolicy配置踩坑

我喜欢把核心内容放开头 此次log.info耗时异常升高,是由于日志量过大(5G甚至以上),并且使用同步阻塞的RollingFileAppenderTimeBasedRollingPolicy,导致log.info一直等待日志文件滚动,造成了异常。解决方式…