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

目录

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.mzph.cn/web/39315.shtml

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

相关文章

上海网站建设如何做

上海是中国最繁华的城市之一,作为全国的经济、文化和科技中心,网站建设在上海变得越来越重要。如何做好上海网站建设,让网站更加吸引人,成为企业和个人宣传自身的重要平台呢? 首先,要有清晰的定位和目标。在…

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-BiLSTM时间序列预测,贝叶斯优化Transfor…

Zoom视颊会议软件使用

GPT-3.5 (OpenAI) Zoom是一款极受欢迎的视频会议软件。使用Zoom可以方便地进行视频会议、远程授课、在线研讨会等活动。以下是Zoom的使用步骤: 1. 下载Zoom客户端 可以在Zoom官网上下载对应平台的Zoom客户端。下载并完成安装后,双击打开客户端。 2. 创建…

【AI】ChatTTS实现文本转语音

最近有时间继续研究一下各种有趣的开源项目,一个叫ChatTTS的项目吸引了我的注意,这个项目可以把文本转换成语音,配合gpt生成文本,可以直接用于生产有声书作品了,这可以说是直接的生产力项目了。 项目对显存的要求不高&…

Git 操作补充:cherry-pick、变基

1. 挑选提交合并 git cherry-pick 对于多分支的代码库,将代码从一个分支转移到另一个分支是一种常见的需求,这可以分成两种情况:一种情况是,你需要另一个分支的所有代码变动,那么就采用 git merge;另一种情…

SF-HCI-SAP问题收集17:值映射布尔型EC数据

Complacency is the enemy of study 学习的敌人是自己的满足。 SAP SuccessFactors Employee Central 到 SAP ERP 的员工主数据复制 successfactor employee center主数据同步,一直以来排错比较难,难的地方是这个提示消息比较隐晦,而且同步的…

云原生技术架构详解

云原生技术最全详解(图文全面总结) 容器技术 容器技术:是将应用程序、及其所有依赖项,打包到一个独立的、可移植的容器中。 如下图所示: 容器技术的实现,最典型的就是以Docker为代表的。 如下图所示: 主要解决: 1、…

Ubuntu设置nacos开机以单机模式自启动

首先,需要安装jdk Ubuntu 安装JDK 创建Systemd服务单元文件 sudo vim /etc/systemd/system/nacos.service按i进入编辑模式,写入下面信息 [Unit] Descriptionnacos server Afternetwork.target[Service] Typeforking Environment"JAVA_HOME/opt/j…

Kafka集群安装部署

简介 Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。 同RabbitMQ一样,Kafka也是消息队列。不过RabbitMQ多用于后端系统,因其更加专注于消息的延迟和容错。 Kafka多用于大数据体系,因其更加专注于数据的吞吐能力…

用freertos后NVIC里系统时钟部分报错,如何解决?

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

YOLOv8模型调参---数据增强

目录 1.数据预处理 2.数据增强 2.1 数据增强的作用 2.2 数据增强方式与适用场景 2.2.1离线增强(Offline Augmentation) 2.2.2 在线增强(Online Augmentation) 3. 数据增强的具体方法 4. YOLOv8的数据增强 4.1 YOLOv8默认…

Http 实现请求body体和响应body体的双向压缩方案

目录 一、前言 二、方案一(和http header不进行关联) 二、方案二(和http header进行关联) 三、 客户端支持Accept-Encoding压缩方式,服务器就一定会进行压缩吗? 四、参考 一、前言 有时请求和响应的body体比较大,需要进行压缩,以减少传输的带宽。 二、方案一(和…

《信息记录材料》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《信息记录材料》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《信息记录材料》级别? 答:国家级。主管单位:全国磁性记录材料信息站 主办单位…

社区活动|FlowUs知识库的发展|先进技术的落地应用|下一代生产力工具你用了吗

在当今快速发展的数字化时代,技术的进步不断推动着工作方式和知识管理的革新。FlowUs,作为一款前沿的知识管理和协作平台,正站在这一变革的浪潮之巅,引领着智能工作的新潮流。 智能化的智能学习引导工具 FlowUs不仅仅是一个工具&…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码,构建数据集。 代码如下: #引入了必要的库和模块,像 mindspore 以及相关的数据处理模块等等。…

Vue2-Vue Router前端路由实现思路

1.路由是什么? Router路由器:数据包转发设备,路由器通过转发数据包(数据分组)来实现网络互连 Route路由:数据分组从源到目的地时,决定端到端路径的网络范围的进程 | - 网络层 Distribute分发…

无人机5公里WiFi低延迟图传模组,抗干扰、长距离、低延迟,飞睿智能无线通信新标杆

在科技日新月异的今天,我们见证了无数通信技术的飞跃。从开始的电报、电话,到如今的4G、5G网络,再到WiFi的广泛应用,每一次技术的革新都极大地改变了人们的生活方式。飞睿智能5公里WiFi低延迟图传模组,它以其独特的优势…

2024上半年热门网络安全产品和工具TOP10

今年上半年,利用生成式人工智能(GenAI)的网络安全工具继续激增。许多供应商正在利用GenAI的功能来自动化安全运营中心(SOC)的工作,特别是在自动化日常活动方面,如收集威胁信息和自动创建查询。 …

爬虫-Python基础

一、Python环境的安装 1. 下载Python 访问Python官网: Welcome to Python.org点击downloads按钮,在下拉框中选择系统类型(windows/Mac OS/Linux等)选择下载最新版本的Python 2. 安装Python 双击下载好的Python安装包勾选左下角 Add Python 3.7 to PATH 选项&…

动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具

Avalonia是什么? Avalonia是一个跨平台的UI框架,专为.NET开发打造,提供灵活的样式系统,支持Windows、macOS、Linux、iOS、Android及WebAssembly等多种平台。它已成熟并适合生产环境,被Schneider Electric、Unity、Jet…