Redis PipelineScript


文章目录

  • 前言
  • 一、Pipeline是什么?
  • 二、Pipeline具体实现
    • 特点
    • 缺点
  • 三、Script
  • Script具体实现
  • 对比Pipeline
  • 三、总结


前言

玩过远程过程调用的小伙伴都知道,一次请求多条数据要比多次请求1条数据效率高(当然,这里的多条数据通常是完全不同的,比如完全不同的ID)。其中的原因如下。

网络传输层是按照segment为单位的,单个segment可以传输大约1400个字节,如果只包含一个long型的ID,传输效率为8/1400, 1%的利用率都不到。再说服务侧,接收数据需要在内核和应用侧做上下文切换,一次切换的时间成本相对固定,如果仅接收这么点数据,是不是浪费?还有,有了数据,还得调度应用线程处理吧,线程好不容易排队等到分配CPU时间片,以Linux系统为例最长50ms, but 你这个请求5ms完事了,没办法线程还得继续进入等待状态,又是一层浪费;这还不算你应用产生的单条数据也很小,依然达不到单个segment的长度,然后response阶段的一波效率差。最终表现就是虽然整体响应时间不长,但是拆分到请求发送,请求处理,响应发送各个阶段时间效率都比较差。

此外,站在单次请求的角度网络传输耗时通常远大于处理耗时,因此减少RTT也可以减少时间消耗。如果可行RTT减少到1次最好,毕竟完全消除RTT目前还做不到。

就Redis而言,虽然每个数据结构都比较巧妙,可以比较高效处理单个指令,但是对一批指令的处理还有优化的空间,这就是pipeline。


一、Pipeline是什么?

Redis的Pipeline和常见的Linux Shell中的Pipeline是两码事。Redis的Pipeline更多是一个batch上的概念,而Linux pipe组成line则是以pipe的方式将多个命令串起来达到顺序的连续执行的目的。虽然两者在执行上都是顺序的,但是Linux Shell下的pipeline通常pipe前一个命令的输出会影响后一个命令的输入,Redis的Pipeline则仅仅保证命令的串行,并不关心命令之间的影响。

二、Pipeline具体实现

在pipeline模式下,client端所有的命令都被cache在本地buffer,直到通过sync命令将数据批量发送到server端。此外pipeline模式也是提升吞吐量的一种方式。

特点

  1. 需要client和server共同配合;
  2. 命令执行中单条命令是原子的, 但是整个pipeline不是原子的;如果需要整个pipeline是原子的, 需要基于transaction或者Script;
  3. 适用于批量处理, 但是对可靠性要求不高的场景;

缺点

  1. 由于批量返回时严格按照顺序完成, 因此需要有buffer进行排队, 如果每条命令返回数据量比较大, 会导致buffer爆掉。因此,buffer占用需要提前有预期。
  2. 对于批量操作命令不支持;

三、Script

前面的Pipeline是批量的,但是非原子。如果你希望所有的命令以原子形式执行,则需要借助于transaction或者Script。因为在Pipeline执行的最小单位是命令,只能保证命令一定是顺序执行,而Script则是把整个Script当做1条命令来执行。因此可以做到原子性。

Script具体实现

  1. Redis内嵌Lua脚本解释器,在Lua脚本中可以执行多个key的读写操作,也可以扩展一些额外功能,比如基于Lua脚本实现RateLimiter;
  2. 在整个Lua脚本执行过程中,其他命令的处理会被阻塞,从而保证原子性;

对比Pipeline

itempipelineScript
批量执行命令YY
原子性NY
灵活性内部命令灵活填充只能调整参数, 且其中的key必须是明确的
cluster集群下不支持,需要自己实现支持, 需要确定复制模式通常为Effects replication, 7.0之后不再支持Verbatim replication

三、总结

以上就是本篇的全部内容,本文从pipeline的背景开始,介绍了pipeline的具体实现、与Shell pipeline的区别,以及与Script对比,希望能帮助你更好地理解和使用Redis。

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

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

相关文章

DDOS百科:什么是 DDoS 攻击及如何防护DDOS攻击

一、什么是 DDoS 攻击? 当多台机器一起攻击一个目标,通过大量互联网流量淹没目标或其周围基础设施,从而破坏目标服务器、服务或网络的正常流量时,就会发生分布式拒绝服务(DDoS)攻击。 DDoS允许向目标发送指数级更多的请求&#…

【大数据之Hadoop】三十七、Hadoop HA高可用

1、HA概述 实现高可用最关键的策略是消除单点故障。HA分成各个组件的HA机制:HDFS的HA和YARN的HA。   Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。 NameNode主要在以下两个方面影响HDFS集群: &#xff…

AI时代图像安全“黑科技”如何助力人工智能与科技发展?

〇、前言 7月7日下午,2023世界人工智能大会(WAIC)“聚焦大模型时代AIGC新浪潮—可信AI”论坛在上海世博中心红厅举行。人工智能等技术前沿领域的著名专家与学者、投资人和领军创业者汇聚一堂,共同探索中国科技创新的驱动力量。 在…

4. 设计(黑盒)测试用例 (一) 等价类 边界值 判定表

本篇文章我们将详细介绍如何来测试用例。 1. 设计测试用例的基本要素 1.1 测试用例概念 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。 1.2 测试用例要素 测试环境、测试步骤、测试数据、预期结果。 1.3 测试用例的重要性 提…

【美团面试】软件测试面试题

一、设计登录界面测试用例 功能测试(Function test) 0. 什么都不输入,点击提交按钮,看提示信息。(非空检查) 1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。(正常输入&#xff0…

【启发式算法】灰狼优化算法【附python实现代码】

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

江南大学轴承数据故障诊断(利用连续小波变换转换为二维图像,再利用CNN进行故障诊断)

1.江南大学轴承数据集介绍 采样频率:50khz,采样时间:10s 转速:600 800 1000/rpm 内圈:ib 外圈:ob 滚动体:tb 正常:N 以600转速下的内圈故障数据为例展示: 开始数据…

第46节:cesium 水面效果(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><!

C 知识积累 替换gets函数 Linux C 语法分析 switch和if else的比较

目录 替换gets函数gets()用处gets()的危险之处gets()的几种替代方法一、用%c循环输入直到遇到换行结束二、用getchar()循环输入直到遇到换行结束三、scanf的另一种用法四、c中的getline()方法五、解决方案使用fgets代替 回车与换行一.知其然二.知其所以然 关键字&#xff0c;操…

怎样优雅地增删查改(五):按组织架构查询

文章目录 原理实现应用测试 之前我们实现了Employee&#xff0c;Alarm管理模块以及通用查询应用层。 Employee的集合查询业务&#xff0c;是通过重写CreateFilteredQueryAsync方法&#xff0c;来实现按组织架构查询的过滤条件。 我们将这段逻辑代码提取到通用查询应用层中&…

Web开发的富文本编辑器CKEditor介绍,Django有库ckeditor_uploader对它进行支持

当需要在网页应用程序中提供富文本编辑功能时&#xff0c;CKEditor是一个流行的选择。CKEditor是一个开源的JavaScript富文本编辑器&#xff0c;它提供了强大的功能和用户友好的界面&#xff0c;使用户可以轻松创建和编辑格式化的文本内容。 以下是CKEditor的一些主要特性&…

大厂sql真题讲解(黑马)

2023 http://yun.itheima.com/open/853.html | 面试宝典-如何备战大厂SQL真题 http://yun.itheima.com/open/858.html | 面试宝典–大厂必考知识开窗函数 http://yun.itheima.com/open/864.html | 面试宝典-详解美团SQL真题 http://yun.itheima.com/open/868.html | 图解大…

【技巧】动态执行js脚本

【技巧】动态执行js脚本 我们写的 js 代码&#xff0c;主要执行在浏览器环境和 node 环境&#xff0c;也叫宿主环境。宿主环境通过加载机制获取到我们的代码&#xff0c;然后使用 js 引擎解释执行。这是正常的 js 代码执行流程。有些场景下&#xff0c;js 代码是通过程序动态生…

供应链管理系统有哪些?

1万字干货分享&#xff0c;国内外 20款 供应链管理软件都给你讲的明明白白。如果你还不知道怎么选择&#xff0c;一定要翻到第三大段&#xff0c;这里我将会通过8年的软件产品选型经验告诉你&#xff0c;怎么样才能快速选到适合自己的软件工具。 &#xff08;为防后续找不到&a…

IOS与Android APP开发的差异性

iPhone和 Android是全球最流行的两种移动平台&#xff0c;有许多不同的开发者开发了应用程序&#xff0c;并将它们发布到市场上。虽然大多数开发者都使用了这两个平台&#xff0c;但您仍然需要了解它们的差异。 虽然 iOS和 Android两个平台都是基于 Linux&#xff0c;但它们却…

(1)ADS-B接收机

文章目录 前言 1.1 所需硬件 1.2 连接到自动驾驶仪 1.3 设置 1.4 ADSB输出配置 1.5 启用载人飞行器避障功能 1.6 飞行器数据库 1.7 开发者信息包括模拟 前言 本文介绍了如何安装和配置 ADS-B 模块&#xff0c;以便你的飞机能够知道附近的其他飞机和空中交通管制&#x…

MyBatis 的架构

MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架&#xff0c;可以将 SQL 语句和 Java 代码进行分离&#xff0c;通过 XML 或注解的方式配置 SQL 语句并执行&#xff0c;从而实现数据访问的功能。MyBatis 的架构包括以下几个部分&#xff1a; SqlSessionFactory&#xff…

学习opencv.js之基本使用方法(读取,显示,灰度化,边缘检测,特征值点检测)

opencv.js是什么 OpenCV.js 是 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;的 JavaScript 版本。OpenCV 是一个广泛使用的计算机视觉和图像处理库&#xff0c;提供了一系列功能强大的算法和工具&#xff0c;用于处理图像、视频、特征提取、对象识别等…

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…

python开发项目基于语音识别的智能垃圾分类系统的设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…