Redis系列(十八)、Redis中的管道pipeline操作(Python)

Redis精通系列——Pipeline(管道) 本文已收录于专栏 《Redis精通系列》 上千人点赞收藏,全套Redis学习资料,大厂必备技能! 目录 1、简介 2、深究pipeline 3、benchmark压测pipeline 4、Jedis使用pipeline 1、简介 Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。一次Redis客户端发起的请求,经过服务端的响应后,大致会经历如下的步骤: 客户端发起一个(查询/插入)请求,并监听socket返回,通常情况都是阻塞模式等待Redis服务器的响应 服务.. 阅读详情

Redis默认每次执行请求都会创建和断开一次连接池的操作,如果想执行多条命令的时候会在这件事情上消耗过多的时间,因此我们可以使用Redis的管道来一次性发送多条命令并返回多个结果,节约发送命令和创建连接的时间提升效率。


目录

介绍

使用

对比Lua脚本

尾巴


Redis6系列文章:

Redis系列(一)、CentOS7下安装Redis6.0.3稳定版

Redis系列(二)、数据类型之字符串String 

Redis系列(三)、数据类型之哈希Hash

Redis系列(四)、数据类型之列表List

Redis系列(五)、数据类型之无序集合Set

Redis系列(六)、数据类型之有序集合ZSet(sorted_set)

Redis系列(七)、常用key命令

Redis系列(八)、常用服务器命令 

Redis系列(九)、Redis的“事务”及Lua脚本操作

Redis系列(十)、详解Redis持久化方式AOF、RDB以及混合持久化

Redis系列(十一)、Redis6新特性之ACL安全策略(用户权限管理)

Redis系列(十二)、Redis6集群搭建及原理(主从、哨兵、集群)

Redis系列(十三)、pub/sub发布与订阅(对比List和Kafka)

Redis系列(十四)、Redis6新特性之RESP3与客户端缓存(Client side caching)

Redis系列(十五)、Redis6新特性之集群代理(Cluster Proxy)

Redis系列(十六)、Redis6新特性之IO多线程

Redis系列(十七)、Redis中的内存淘汰策略和过期删除策略


介绍

在前面我们介绍过Redis的事务和lua脚本操作,事实上在各语言版本的Redis中都有管道(Pipeline)的功能,本篇以python版作为示例,当我们使用python给redis发送命令时会经历下面的步骤:

  1. 客户端发送请求,获取socket,阻塞等待返回;
  2. 服务端执行命令并将结果返回给客户端;

而当执行的命令较多时,这样的一来一回的网络传输所消耗的时间被称为RTT(Round Trip Time),显而易见,如果可以将这些命令作为一个请求一次性发送给服务端,并一次性将结果返回客户端,会节约很多网络传输的消耗,可以大大提升响应时间。

官网:https://redis.io/topics/pipelining 

逐个命令请求:

管道请求:

使用

管道的使用很简单,python版代码如下,在管道中可以选择是否开启事务,默认是开启的,这里的事务与Redis的事务一样为弱事务性不是真正的事务:

import redis

#创建连接池获取连接
pool = redis.ConnectionPool(host='wykd', port=6379,password='123456', decode_responses=True)
rp1 = redis.Redis(connection_pool=pool)

#创建管道,可以选择开启或关闭事务,这里的事务与Redis事务一样是弱事务型
pipe = rp1.pipeline(transaction=True)
#在管道中添加命令
pipe.set('new','123')
pipe.set('name', 'wyk2')
pipe.set('company', 'csdn2')
pipe.hincrby('hage','wyk',1)

#这个命令会报错,因为hage为hash类型不能使用get命令,此时无论开启关闭事务,管道中的其他命令也依然会正常执行
#pipe.get('hage') 

#也可以用下面的语法将多个命令拼接到一起
# pipe.set('name', 'wyk').set('company', 'csdn').hset('hage', 'wyk',28).hincrby('hage','wyk',1)

#执行pipeline里的脚本
pipe.execute()

当管道中有命令报错时,无论管道是否开启事务都不会影响其他脚本的执行:

在管道中可以一次性获取多个命令的返回值,以列表形式:

pipe.get('name').get('company').hget('hage', 'wyk')
res = pipe.execute()
print(res)

对比Lua脚本

在前面的文章中提到过,Redis的Script会当成一个命令,具有原子性,在执行Script的时候不会被其他的命令插入,因此更适合于处理事务;而管道虽然也会将多个命令一次性传输到服务端,但在服务端执行的时候仍然是多个命令,如在执行CMD1的时候,外部另一个客户端提交了CMD9,会先执行完CMD9再执行管道中的CMD2,因此事实上管道是不具有原子性的。

就场景上来说,正因为Lua脚本会被视为一个命令去执行,因为Redis是单线程执行命令的,所以我们不能在lua脚本里写过于复杂的逻辑,否则会造成阻塞,因此lua脚本适合于相对简单的事务场景。

而管道因为不具有原子性,因此管道不适合处理事务,但管道可以减少多个命令执行时的网络消耗,可以提高程序的响应速度,因此管道更适合于管道中的命令互相没有关系,不需要有事务的原子性,且需要提高程序响应速度的场景。

尾巴

管道可以提升我们程序中的响应时间,同时我们不能完全依赖于它的"事务"机制,只需要把管道当做"批处理"工具即可,在某些场合下,更需要结合管道和lua脚本一起使用。

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

redis中使用pipeline批量执行命令,提升性能 提交到pipeline中,pipeline一次性的将数据发送给服务器,服务器再逐条执行命令。RedisCallback更接近redis原生命令。SessionCallback对操作进行了封装。,可以根据操作不同的数据类型进行转换,将一批要执行的redis命令。注意:此操作非原子性。将键和值都转换为字节码。中已经提供了对应方法。 阅读详情

相关推荐

生成式AI如何重构推荐系统:开发者实战指南

推荐系统正从基于统计共现与人工规则的传统范式,转向以语义理解、实时反馈和动态意图建模为核心的新型架构。生成式AI并非简单替换精排模型,而是倒逼计算确定性、特征可解释性与反馈延迟容忍度三大底层约束发生根本性松动。其技术价值体现在冷启动缓解、长尾覆盖增强、多模态协同理解及主动用户探询等关键能力跃迁。典型应用场景包括动态重排、提示工程驱动的特征替代、语义化协同过滤与流式意图捕捉。本文聚焦真实生产环境中的混合推理架构、小模型选型策略与GenAI专用评估体系,尤其强调生成式AI与传统推荐模块(如LightGBM、It

weixin_34075268的博客 339

redis批量处理工具pipeline

redis批量处理工具pipeline

IT之一小佬的博客 3632

Redis:14---常用功能之(Pipeline)

一、Pipeline概述Redis客户端执行一条命令分为如下四个过程:1.发送命令2.命令排队3.命令执行4.返回结果其中1+4称为Round Trip Time(RTT,往返时间)Pi...

yolo模型训练找我,AI游戏合作找我 810

python redis pipeline 堆积_Python Redis pipeline操作和Redis乐观锁保持数据一致性

Redis是建立在TCP协议基础上的CS架构,客户端client对redis server采取请求响应的方式交互。redis 乐观锁:也可理解为版本号比较机制,主要是说在读取数据逇时候同时读取其版本号,然后在写入的时候,进行版本号比较,如果一致,则表明此数据在监听期间未被改变,可以写入,如果不一致说明此数据被修改过,不能写入,否则会导致数据不一致的问题。一般来说客户端从提交请求到得到服务器相应,需...

weixin_39959615的博客 360

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南01

高并发:限流、熔断、降级高性能:红包拆分、多级缓存、大Key/热Key拆分、Pipeline、线程池、RocketMQ零丢失、幂等、分布式锁、集群缩容、分批入库海量数据处理:日志分表分片、跨表查询、冷热分层、大数据引擎服务器选型系统安全:网关安全、服务器安全、云存储安全、风控、监控、测试数据一致性:缓存与数据库一致性、大厂方案、蓝绿回滚、流量一致性、流程一致性项目与团队管理:流程问题、管理问题(风险、成本、人员、文档、培训)稳定性建设:上线三板斧、线上五步闭环、混沌工程、容量规划。

weixin_49199313的博客 249

Redis研究(十八)—管道(pipeline)

客户端和Redis使用TCP协议连接。不论是客户端向Redis发送命令还是Redis向客户端返回命令的执行结果,都需要经过网络传输,这两个部分的总耗时称为往返时延。根据网络性能不同,往返时延也不同,大致来说到本地回环地址(loop back address)的往返时延在数量级上相当于Redis处理一条简单命令(如LPUSH list  1 2 3)的时间。如果执行较多的命令,每个命令的往返时延

小地盘的诺克萨斯 3396

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 406

redis运维(十八)pipeline

pipeline + redis事务。python使用pipeline。pipeline应用场景。pipeline的理念。

wzj_110的博客 574

【信息科学与工程学】【数据中心】 第十五篇 智算中心DaaS数据消费场景02

智算中心DaaS数据共享场景的分级分类是一个复杂的系统工程,需要从技术、安全、合规、治理、运营等多个维度进行综合考虑。本分级分类体系为不同场景下的数据共享提供了详细的指导,包括安全分级、共享模式、技术架构、合规治理等方面。在实施数据共享平台时,应结合自身业务需求、技术能力和资源情况,选择适合的共享模式和实施路径。同时,要高度重视数据安全和隐私保护,采用先进的技术和管理手段,确保数据共享的安全可控。

weixin_49199313的博客 1万+

LDPC码译码原理——概率公式推导

怎么说呢,一直以来都想写一下博客。近半年多来我一直在学习LDPC码译码上的东西,主要是在FPGA实现上的,所以这次想写一些关于这方面的内容,包括译码的原理、仿真以及实现。(当然是基于准循环LDPC码上实现的)不过呢,我写这个的初衷是为了让初学者理解入门用的,而不是在大牛面前班门弄斧,有错误之处欢迎大家批评指正。不知道会不会有人一开始像我一样,为了学好LDPC码,先去好好了解其它的诸如RS码或者是卷...

stand_by_me123的博客 2万+

OpenCode企业级落地:代码语义索引、权限审计与可合并补丁

在AI编程助手从个人工具迈向企业生产环境的过程中,‘代码理解’不再仅依赖向量检索(RAG),而需融合编译器级符号解析、结构化文档注入与Git语义上下文建模。OpenCode的企业级能力核心在于构建可验证、可审计、可嵌入CI/CD的知识操作系统——它要求对代码库进行跨仓库语义索引,对配置文件实施策略驱动的动态脱敏,并将生成结果转化为符合团队规范、带影响分析与测试覆盖的可合并补丁。本文深入解析OpenCode在工业边缘计算、智能座舱等真实场景中的三层索引架构、OPA策略管控实践及补丁流水线设计,为技术决策者提供

weixin_30655569的博客 415

LabVIEW+数据库应用系列保姆级教程,第一篇数据库连接

目录LabVIEW连接数据库的方法连接MySQL连接Oracle,SQL Server,Access等 LabVIEW连接数据库的方法 1、创建udl(Universal Data Link)是通用数据连接文件。界面操作,简单快捷。 2、编写连接字符串。需要熟悉连接字符串的结构,容易出错。 3、其他… 本教程教你使用第1种方法,也是最简单、最常用的方法。 连接MySQL 1、在MySQL Installer内安装MySQL Connector/ODBC,建议安装32位(X86),如下图: 2、创建ODBC

wwplh5520370的博客 1万+

机器学习模型上线后的系统性风险与生产治理实践

机器学习模型部署不是项目终点,而是工程挑战的真正起点。当模型脱离离线环境进入真实业务流,其稳定性不再取决于算法精度,而取决于对系统边界、依赖失效、数据漂移和降级策略的深度设计。本文围绕特征服务超时、数据契约断裂、重试风暴等典型集成故障,解析如何构建具备可观测性、弹性降级能力与运行时数据校验的生产级ML系统;结合金融场景严苛的延迟预算(如反欺诈P99≤80ms)与业务影响监控,阐明性能优化本质是业务权衡而非纯技术调优。关键词涵盖模型监控、数据漂移检测、系统性假设断裂、生产治理。

xSTARx 122

新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)

本文通过‘东北天(ENU)’和‘右前上(RFU)’坐标系,详细解析惯性导航中的姿态矩阵概念。包含Python代码验证,帮助新手快速理解坐标变换、欧拉角及旋转矩阵的构建与应用,特别强调有限转动不可交换性与无限转动次序无关的区别。

weixin_29062255的博客 332

华为Ascend_toolkit在x86ubuntu安装失败报错。[WARNING] driver package is not installed. If you install in docker

这个报错发生在交叉编译配置Ascend_toolkit环境时,安装Ascend_toolkit安装包的时候发生。[Y/N]Y。

anananajiushiwo的博客 1020

[Python] 操作redis使用pipeline保证原子性

普通 Pipeline:无法保证原子性。事务 Pipeline (:可以保证原子性。

言之。 1万+

手把手教你学Simulink——基于经典滤波器设计的场景:低通滤波器(LPF)的设计与频率响应仿真

滤波器是信号处理领域中非常重要的组件,用于去除不需要的频率成分或者提取有用的频率信息。低通滤波器(Low-Pass Filter, LPF)允许低于某个特定截止频率的信号通过,同时衰减高于该截止频率的信号。在本教程中,我们将学习如何使用设计一个简单的模拟低通滤波器,并对其频率响应进行仿真分析。本文介绍了如何使用设计一个简单的模拟低通滤波器,并通过仿真展示了其应用效果。通过这样的实践,您不仅能够加深对滤波器工作原理的理解,还能掌握利用Simulink进行滤波器设计与仿真的基本技能。

MHD0815的博客 5720

Redis--流水线pipeline的使用

1.什么是pipeline? 它是将一批命令进行一个打包 在服务端进行一个批量的计算 按顺序将结果返回给客户端 这就是一个流水线 1次流水线(pipeline)(n条命令)=1此网络时间+n次命令时间 可以大大减少网络时间的一个开销 2.和N次命令操作对比 N次命令操作 :n次网络时间+n次命令时间 一次只携带一条命令 1次pileline操作:1此网络时间+n次命令时间 一次携带多条命令 *re...

qq_41799291的博客 727

全面指南:PyTorch与ROCm版本兼容性及多版本环境管理

本文详细介绍了在AMD GPU上配置PyTorch开发环境的完整流程,重点解决版本兼容性和多版本ROCm环境管理问题。主要内容包括:1) PyTorch与ROCm版本对应关系查询;2) 四种查看ROCm版本的方法;3) 使用update-alternatives管理多版本ROCm;4) 环境变量配置与冲突解决方案;5) 完整的验证流程和性能测试方法。文章提供了最佳实践建议和故障排除清单,帮助开发者快速搭建稳定高效的深度学习开发环境,充分发挥AMD GPU硬件性能。通过系统化的验证流程确保各组件协同工作,解决

数字人生 607

这20个网络工程项目经验,帮我跳槽加薪不止一次

嘿,大家好,我是圈圈,一个在网络工程圈子里混了十多年的老鸟。从国企的网管起步,到现在给大厂做顾问,我见过太多简历:有的光鲜亮丽,证书一堆,但一聊项目,就露怯;有的简历朴实,但列出的项目经验让人眼前一亮,直接拿offer。为什么?因为招聘官最看重实战。理论谁都会背,项目经验才是你的“硬通货”。尤其在网络工程这行,项目不光证明你的技能,还展示你解决问题的能力。今天,我就分享20个我亲身经历或见过的网络工程项目经验。每个都值得写进简历,不是吹牛,这些项目帮我跳槽加薪不止一次。

网络技术联盟站 432

python之Redis pipline管道

在python中的redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。 import redis, time pool = redis.ConnectionPool(host='localhost', port=6379) ...

likunkun__的博客 849

上下双相机定位贴合(原理到应用,halcon源码详解)

上下双相机定位贴合(原理到应用,halcon源码详解) 一、简介(类型与之前的文章)看你们理解那个文章快 主要讲解上下双相机定位贴合的原理和实现过程,包括各种标定、组合使用及具体的halcon源码实现,适用于的X、Y、Z三轴加一旋转轴系统,如模组组成的多轴系统、Scara四轴机器、六轴机器人(在运行过程中保证几个自由度不动,运行即可) 二、标定介绍 这一小节总结了通用的相机和轴的相对位置模型,并对其标定进行详细讲解 本系统仅使用了九点标定,精度可做到0.05mm 九点标定作用: A、本质就是仿射变换,一个坐

苏州程序大白的博客 9975

python redis pipeline_深入Redis之 pipeline流水线 (三)

pipeline (流水线)流水线是能够帮助客户端将多条命令打包一起发送给服务端的工具。情景1:客户端如果想获取或者设置多个key,可以发送多次get,set命令。但是每次命令从客户端传到redis服务端都要消耗网络时间。发送n次会消耗n次网络时间。客户端等待的时间 = n次网络时间+n次命令时间(包括命令排队时间和执行时间)解决方法:使用mget或者mset,只发送了一次命令客户端等待的时间 =...

weixin_39975366的博客 509

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python下redis管道(pipeline)操作

redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作, 如果想要在一次请求中指定多个命令

mjgwf的专栏 1118

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Redis管道(Pipeline)详解:提升批量操作性能的「神技」

最近在做项目时遇到个棘手问题:需要往Redis里批量插入10万条数据,用普通的SET命令一条一条发,结果耗时直接飙到5秒+!后来看了眼监控,发现网络延迟(RTT)占了总耗时的80%——这才意识到:当批量操作遇上高网络延迟,普通命令的效率有多拉胯。 直到用了Redis的「管道(Pipeline)」,同样的10万条数据,耗时直接降到200ms!今天就来给大家扒一扒这个「性能救星」的底层逻辑、使用技巧和避坑指南。

weixin_42148384的博客 1562

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: Redis系列(十七)、Redis中的内存淘汰策略和过期删除策略
下一篇: Redis系列(十九)、布隆过滤器(Bloom Filter)
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值