当前位置: 首页 > news >正文

[001-03-007].第07节:Redis中的管道

我的后端学习大纲

我的Redis学习大纲


1、Redis管道的由来:

  • 1.Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:
    • 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应
    • 服务端处理命令,并将结果返回给客户端。

上述两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间)

  • 2.Redis客户端与服务端的交互模型:
    在这里插入图片描述

综上:如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了,性能不太好


2、Redis管道是什么:

2.1.解决思路:

  • 1.管道(pipeline)可以一次性发送多条命令给服务端,服务端依次处理完完毕后,通过一条响应一次性将结果返回,通过减少客户端与redis的通信次数来实现降低往返延时时间;
  • 2.pipeline实现的原理是队列,先进先出特性就保证数据的顺序性;
    在这里插入图片描述

2.2.官网:

在这里插入图片描述

2.3.管道定义:

  • pipeline是为了解决RTT往返时间,仅仅是将命令打包一次性发送,对整个redis的执行不造成其他任何影响

批处理命令变种优化措施,类似于Redis中的原生批处理命令mset和mget


3、案例演示:

在这里插入图片描述


4. Pipeline 与原生批量对比:

  • 1.原生批量命令是原子性(如:mset,mget),pipeline是非原子性
  • 2.原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令
  • 3.原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成

5、Pipeline 与事务对比

  • 1.事务具有原子性,管道不具有原子性
  • 2.管道一次性将多条命令发送到服务器,事务是一条一条发的,事务只有在接收到exec命令后才会执行,管道不会
  • 3.执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会

6、Pipeline 注意事项

  • 1.pipeline缓冲的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续的指令
  • 2.使用pipeline组装的命令个数不能太多,不然数据量过大客户端阻塞的时间可能过久,同时服务器也被迫回复一个队列答复,占用很多内存

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【python报错已解决】`ModuleNotFoundError: No module named ‘requests‘`
  • 中级练习[4]:Hive SQL商品销售与用户增长数据分析
  • python使用Pyvis库绘制B站评论互动网络结构图
  • LeetCode70:爬楼梯
  • 后端入门 (JQuery基础) 01
  • Python 正则表达式详解:从基础匹配到高级应用
  • AIGC实战——多模态模型Flamingo
  • 手势开关灯
  • 上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例
  • Router安装以及导入
  • SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World
  • 【Unity学习心得】如何制作俯视角射击游戏
  • 多线程下的共享变量访问数据竞争的问题
  • 告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
  • 骑砍2霸主MOD开发(26)-使用TrfExporterBlender制作TRF文件
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【React系列】如何构建React应用程序
  • Apache Pulsar 2.1 重磅发布
  • ComponentOne 2017 V2版本正式发布
  • JavaScript服务器推送技术之 WebSocket
  • Java的Interrupt与线程中断
  • JS+CSS实现数字滚动
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring Cloud Feign的两种使用姿势
  • vue.js框架原理浅析
  • 半理解系列--Promise的进化史
  • 程序员最讨厌的9句话,你可有补充?
  • 电商搜索引擎的架构设计和性能优化
  • 给Prometheus造假数据的方法
  • 构造函数(constructor)与原型链(prototype)关系
  • 计算机常识 - 收藏集 - 掘金
  • 面试总结JavaScript篇
  • 说说动画卡顿的解决方案
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 因为阿里,他们成了“杭漂”
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 自制字幕遮挡器
  • 做一名精致的JavaScripter 01:JavaScript简介
  • kubernetes资源对象--ingress
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 飞书APP集成平台-数字化落地
  • #QT(TCP网络编程-服务端)
  • #控制台大学课堂点名问题_课堂随机点名
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十二)Flink Table API
  • (十六)串口UART
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一) springboot详细介绍
  • (转) ns2/nam与nam实现相关的文件
  • (转载)从 Java 代码到 Java 堆