请求包的大小会影响Redis每秒处理请求数量

news2024/9/29 19:31:19

文章目录

  • 🔊博主介绍
  • 🥤本文内容
    • 压测规划
    • 客户端长连接数量对性能的影响
    • 请求包大小的影响
    • Pipleline模式对Redis的影响
  • 📢文章总结
  • 📥博主目标

🔊博主介绍

🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、🚀徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。

📕拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCould、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RockerMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙有过从0到1的项目高并发项目开发与管理经验,对JVM调优、MySQL调优、Redis调优 、ElasticSearch调优、消息中间件调优、系统架构调优都有着比较全面的实战经验。

📘有过云端搭建服务器环境,自动化部署CI/CD,弹性伸缩扩容服务器(最高200台),了解过秒级部署(阿里云的ACK和华为云的云容器引擎CCE)流程,能独立开发和部署整个后端服务,有过分库分表的实战经验。

🎥经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧,与清华大学出版社签下了四本书籍的合约,并将陆续在明年出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码–沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!


文章目录

  • 🔊博主介绍
  • 🥤本文内容
    • 压测规划
    • 客户端长连接数量对性能的影响
    • 请求包大小的影响
    • Pipleline模式对Redis的影响
  • 📢文章总结
  • 📥博主目标

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。

💡在这个美好的时刻,本人不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

🥤本文内容

CSDN

压测规划

实施性能评估之前,我们需明确介绍本次测试的环境要素。

设备性能: 选用一台具备1核CPU,内存总量为1GB的阿里云服务器对另一台拥有2核CPU、内存总容量为4GB的Redis服务器进行压力测试。此Redis服务器CPU型号为2.5 GHz主频的Intel® Xeon® E5-2682 v4(Broadwell),以确保测试客户端设备性能不受阻碍。

网络环境: 两台服务器网卡均采用1000M速率,位于同一局域网内,内网带宽为1000M。两台设备的内网IP地址分别为:110.42.239.246(Redis服务器)与139.224.233.121(测试服务器)。

系统环境: 两台服务器均采用CentOS7操作系统,以下两项参数需设定为:

vm.overcommit_memory = 1
net.core.somaxconn = 2048

Redis相关配置: 主要关注三项配置:

#后代运行 
daemonize yes 
#不开启applend形式的数据持久化能力 
appendfsync no 
#不开启快照能力
save <seconds> <changes>

测试工具: 借助Redis自带的测试工具redis-benchmark进行测量。以下是在测试服务器上执行的指令:

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 100 -P 8 -q

让我们分析上述命令中各个参数的含义:

-h 目标Redis服务器网络地址

-p 目标Redis服务器端口

-c 客户端并发长连接数

-n 本次测试所需发起的请求数

-t 测试请求类型

-d 测试请求数据量

-P 启动Pipeline模式,并设置Pipeline通道数量

-q 仅显示"requests per second"结果

以上命令的含义即为,针对110.42.239.246:6379这台Redis发送共计100万次请求,平均使用20个长连接执行,所有请求均为set命令,每条set命令包长100字节,开启8条Pipeline通道传输,仅呈现requests per second结果。

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 100 -P 8 -q

SET: 534759.38 requests per second

客户端长连接数量对性能的影响

我们将进行四项实验,即分别应用一条长连接、五条长连接、十条长连接以及五十条长连接,向大小为100字节的请求发送100万次请求,以比较和观察不同数量的客户端长连接对Redis服务性能产生何种影响。以下是详细信息:

单条长连接实验:

./redis-benchmark -h 110.42.239.246 -p 6379 -c 1 -n 1000000 -t set -d 100 -q SET: 8768.55 requests per second

五条长连接实验:

./redis-benchmark -h 110.42.239.246 -p 6379 -c 5 -n 1000000 -t set -d 100 -q SET: 35334.44 requests per second

十条长连接实验:

./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 100 -q SET: 52430.14 requests per second

五十条长连接实验:

./redis-benchmark -h 110.42.239.246 -p 6379 -c 50 -n 1000000 -t set -d 100 -q SET: 52413.65 requests per second

在这里插入图片描述
基于上述三个测试用例的实验结果,我们得出以下结论:

仅存在单个持久连接通信时,RPS(每秒处理请求数)约为8700次;

当持久连接数量逐渐增加时,RPS的数值呈现近乎线性的上升趋势;

当持久连接数量达到某个特定数值后,Redis服务器总体的RPS将趋于稳定,稳定在52400左右的范围内;

客户端持久连接的数量对Redis的总体吞吐量具有直接影响,然而,在持久连接数量增长至均衡值后,持久连接数量不再对系统总体吞吐量产生显著影响,该均衡值取决于具体的应用场景,例如网络速度、请求包大小等因素均会产生相应的影响。

请求包大小的影响

请求包的大小无疑会对Redis每秒处理的请求数量产生影响,为了深入了解其具体影响机制,我们进行了多组实验加以观测。

请求包大小为2字节 :./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 2 -q SET: 52474.16 requests per second CPU平均损耗:42%

请求包大小为1000字节:./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 1000 -q SET: 52430.14 requests per second CPU损耗:48%

请求包大小为1400字节:./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 1400 -q SET: 45396.77 requests per second CPU平均损耗:41%

请求包大小为1500字节:./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 1500 -q SET: 25518.67 requests per second CPU平均损耗:29%

请求包大小为5000字节:./redis-benchmark -h 110.42.239.246 -p 6379 -c 10 -n 1000000 -t set -d 5000 -q SET: 12736.74 requests per second CPU平均损耗:24%

请求包大小为10000字节:./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 10000 -q SET: 6476.81 requests per second CPU平均损耗:18%

在这里插入图片描述

根据上述六项实验所揭示的结果,我们可以归纳出如下结论:

当Redis服务器拥有充分的CPU资源支持时,无论是仅有2字节的请求,还是达到1000字节的请求,均不会对Redis的整体处理能力产生显著影响。

当请求体积在1400字节以下时,Redis的性能显示出稳定的特性,然而,当请求体积恰好达到1500字节时,Redis整体性能发生严重下滑。这是因为通常TCP/IP网络的MTU设定为1500字节,一旦测试数据尺寸超过此数字,它就会被划分为多个数据包在网络中传输,从而加剧了性能下降的程度。

当请求体积超过1500之后,Redis的性能呈现出与包裹体增长呈近乎线性关系的下跌趋势。

Pipleline模式对Redis的影响

Redis以同步的请求响应模型作为服务供给的基础,在常规情况下,客户端在接收到Redis的响应之后才会发出第二条请求。在这一过程中,倘若大量的指令同时需要执行,则每个长连接的利用效率并不高,大部分时间都处在等待状态,这种模式下长连接的利用效率有待提高。

Redis提供了一种能够聚合请求和响应的Pipeline模式,其核心思想是将多个指令纳入同一个请求中发送至Redis,然后Redis会依次执行这些命令,在执行过程中,将结果缓存到内存中,且待所有的指令均执行完毕后,将所有指令的执行结果打包在一个响应中返回给客户端。

在特定的场景下,Pipeline模式具有相当大的实用性,例如多个command对相应结果相互独立,亦或者对于结果响应无需立刻获取,此时,Pipeline模式可以胜任这种“批量处理”的任务;此外,在一定程度上,可以显著提升性能,性能提升的主要原因在于TCP连接中减少了“交互往返”的时间。

在三个相对较小的command置于同一个Pipeline请求中时,通常只需一个TCP报文即可发送至服务器端,相较之下,非Pipeline模式则需发送三次,每次都需等待响应返回后方可继续发送,因此在传输与处理效率方面,Pipeline机制表现出明显的优越性。

在这里插入图片描述

接下来,我们会进行一项实验以验证具体的效率提升幅度。

命令大小为100字节,不使用pipeline传输

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 100 -q

SET: 52394.43 requests per second

命令大小为100字节,使用pipeline传输,每个请求携带8个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 100 -q -P 8

SET: 495662.97 requests per second

命令包大小为100字节,使用pipeline传输,每个请求携带10个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 100 -q -P 10

SET: 558659.25 requests per second

命令包大小为100字节,使用pipeline传输,每个请求携带11个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 100 -q -P 11

SET: 312940.09 requests per second

命令包大小为100字节,使用pipeline传输,每个请求携带15个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 100 -q -P 15

SET: 452386.34 requests per second

请求包大小为100字节,使用pipeline传输,每个请求携带40个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 5000000 -t set -d 100 -q -P 40

SET: 487519.53 requests per second

请求包大小为200字节,不使用pipeline传输

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 200 -q

SET: 51167.91 requests per second

请求包大小为200字节,使用pipeline传输,每个请求携带4个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 200 -q -P 4

SET: 220288.56 requests per second

请求包大小为200字节,使用pipeline传输,每个请求携带6个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 200 -q -P 6

SET: 161147.36 requests per second

请求包大小为200字节,使用pipeline传输,每个请求携带8个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 2000000 -t set -d 200 -q -P 8

SET: 221361.38 requests per second

请求包大小为3000字节,不使用pipeline传输

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 3000 -q

SET: 21104.17 requests per second

请求包大小为3000字节,使用pipeline传输,每个请求携带8个命令

./redis-benchmark -h 110.42.239.246 -p 6379 -c 20 -n 1000000 -t set -d 3000 -q -P 8

SET: 21713.17 requests per second

在这里插入图片描述

通过分析上文所阐述的一系列实验数据,我们得出如下观点:

若命令包体较小,pipeine机制对Redis总体性能的提升效果愈加明显,当命令包体为100字节时,Redis的整体性能可实现一个数量级的显著提高;

针对一个pipeine请求的总体规模(命令包大小乘以命令个数),若其恰好与TCP/IP网络的MTU设定相匹配,不易产生碎片请求的情况下,性能最佳,此种状况难以强行追求;

然而,当命令包体增大时,pipeine机制对Redis整体性能的提升并无显著作用。

在命令传输内容相对较少,且各命令之间无依赖关系的情况下,采用pipeine机制可显著提升Redis的整体吞吐量。然而,某些系统可能对可靠性有较高要求,要求每次操作均需立即得知此次操作的执行情况及其数据是否已写入Redis,对于此类系统,pipeine机制或许并不适用。当命令传输的内容较大时(例如大于3k),pipeine机制对性能的提升效果亦不再明显,因此建议此时不宜采用pipeine机制。

CSDN

📢文章总结

对本篇文章进行总结:

🔔以上就是今天要讲的内容,阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。

以梦为马,不负韶华

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

🚀🎉希望各位读者大大多多支持用心写文章的博主,现在时代变了,🚀🎉 信息爆炸,酒香也怕巷子深🔥,博主真的需要大家的帮助才能在这片海洋中继续发光发热🎨,所以,🏃💨赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

  • 💂 博客主页: 我是廖志伟
  • 👉开源项目:java_wxid
  • 🌥 哔哩哔哩:我是廖志伟
  • 🎏个人社区:幕后大佬
  • 🔖个人微信号SeniorRD
  • 🎉微信号二维码SeniorRD

📥博主目标

探寻内心世界,博主分享人生感悟与未来目标

  • 🍋程序开发这条路不能停,停下来容易被淘汰掉,吃不了自律的苦,就要受平庸的罪,持续的能力才能带来持续的自信。我本是一个很普通的程序员,放在人堆里,除了与生俱来的盛世美颜,就剩180的大高个了,就是我这样的一个人,默默写博文也有好多年了。
  • 📺有句老话说的好,牛逼之前都是傻逼式的坚持,希望自己可以通过大量的作品、时间的积累、个人魅力、运气、时机,可以打造属于自己的技术影响力。
  • 💥内心起伏不定,我时而激动,时而沉思。我希望自己能成为一个综合性人才,具备技术、业务和管理方面的精湛技能。我想成为产品架构路线的总设计师,团队的指挥者,技术团队的中流砥柱,企业战略和资本规划的实战专家。
  • 🎉这个目标的实现需要不懈的努力和持续的成长,但我必须努力追求。因为我知道,只有成为这样的人才,我才能在职业生涯中不断前进并为企业的发展带来真正的价值。在这个不断变化的时代,我们必须随时准备好迎接挑战,不断学习和探索新的领域,才能不断地向前推进。我坚信,只要我不断努力,我一定会达到自己的目标。

🔔有需要对自己进行综合性评估,进行职业方向规划,我可以让技术大牛帮你模拟面试、针对性的指导、传授面试技巧、简历优化、进行技术问题答疑等服务。

可访问:https://java_wxid.gitee.io/tojson/

开发人员简历优化、面试突击指导、技术问题解答

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

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

相关文章

pyspark分布式部署随机森林算法

前言 分布式算法的文章我早就想写了&#xff0c;但是一直比较忙&#xff0c;没有写&#xff0c;最近一个项目又用到了&#xff0c;就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程&#xff0c;写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…

springboot-基础-eclipse配置+helloword示例

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse&#xff0c;也就是STS&#xff0c;因为不想再装&#xff0c;所以考虑eclipse插件安装jdk和eclipse安装…

适配器模式(Adapter Pattern) C++

上一节&#xff1a;原型模式&#xff08;Prototype Pattern&#xff09; C 文章目录 0.理论1.组件2.类型3.什么时候使用 1.实践1.基础接口和类2.类适配器实现3.对象适配器实现 0.理论 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允…

【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

python Matplotlib Tkinter-->最终框架一

3D雷达上位机实例(能够通过点击柱状图来展示3D雷达数据)2024.2.26 环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk impor…

【数据结构】线性表 顺序表(动态、静态分配,插入删除查找基本操作)解析+完整代码

1.线性表的基本概念 定义 线性表&#xff08;Linear List&#xff09;是具有相同数据类型的n个数据元素的有限序列。 n为表长&#xff0c;n0时线性表是个空表 前驱、后继 前驱&#xff1a;其中一个数据元素的前一个元素。第一个元素没有前驱。后继&#xff1a;其中一个数据元素…

索引使用规则1——最左前缀法则

这篇文章主要介绍索引的使用规则——最左前缀法则&#xff0c;关于索引的效率&#xff0c;可以查看上一篇文章索引的有效性 最左前缀法则&#xff1a;索引使用了复合索引&#xff0c;也就是联合索引&#xff0c;使用一个索引名称索引了好几个字段。在这类索引中需要遵守最左前…

Unity零基础到进阶 | Unity中的 RectTransformUtility 方法整理汇总

Unity零基础到进阶 ☀️| RectTransformUtility 方法整理汇总一、RectTransformUtility 官方文档1.1 RectTransformUtility.CalculateRelativeRectTransformBounds&#xff08;重&#xff09;1.2 RectTransformUtility.FlipLayoutAxes1.3 RectTransformUtility.FlipLayoutOnAxi…

pytorch -- CIFAR10 完整的模型训练套路

网络结构 代码 # CIFAR 10完整的模型训练套路&#xff1a; import torch.optim import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom model import *# 1. 准备数据集 train_data torch…

用 React 实现搜索 GitHub 用户功能

用 React 实现搜索 GitHub 用户功能 在本篇博客中&#xff0c;我们将介绍如何在 React 应用中搜索 GitHub 用户并显示他们的信息。 创建 React 应用 首先&#xff0c;我们使用 Create React App 创建一个新的 React 应用。Create React App 是一个快速搭建 React 项目的工具…

【QT+QGIS跨平台编译】之五十四:【QGIS_CORE跨平台编译】—【qgssqlstatementlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Vue笔记(一)

常用指令 1.v-show与v-if底层原理的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>创建一个V…

【教3妹学编程-算法题】匹配模式数组的子数组数目 I

3妹&#xff1a;2哥2哥&#xff0c;你有没有看到上海女老师出轨男学生的瓜啊。 2哥 : 看到 了&#xff0c;真的是太毁三观了&#xff01; 3妹&#xff1a;是啊&#xff0c; 老师本是教书育人的职业&#xff0c;明确规定不能和学生谈恋爱啊&#xff0c;更何况是出轨。 2哥 : 是啊…

好用的IP反查接口

IP-API.com - Geolocation API - Documentation - JSON 自定义返回参数调用&#xff08;1&#xff09;&#xff1a; http://ip-api.com/json/24.48.0.1?fieldsstatus,message,country,countryCode,region,regionName,cityhttp://ip-api.com/json/24.48.0.1?fieldscountry,co…

读人工不智能:计算机如何误解世界笔记04_数据新闻学

1. 计算化和数据化的变革 1.1. 每一个领域都在进行计算化和数据化的变革 1.1.1. 出现了计算社会科学、计算生物学、计算化学或其他数字人文学科 1.1.2. 生活已走向计算化&#xff0c;人们却一点也没有变 1.2. 在如今的计算化和数据化世界中&#xff0c;调查性新闻的实践必须…

vue - - - - Vue3+i18n多语言动态国际化设置

Vue3i18n多语言动态国际化设置 前言一、 i18n 介绍二、插件安装三、i18n配置3.1 创建i18n对应文件夹/文件3.2 en-US.js3.3 zh-CN.js3.4 index.js 四、 mian.js 引入 i18n配置文件五、 组件内使用六、使用效果 前言 继续【如何给自己的网站添加中英文切换】一文之后&#xff0c…

【MySQL】SQL 优化

MySQL - SQL 优化 1. 在 MySQL 中&#xff0c;如何定位慢查询&#xff1f; 1.1 发现慢查询 现象&#xff1a;页面加载过慢、接口压力测试响应时间过长&#xff08;超过 1s&#xff09; 可能出现慢查询的场景&#xff1a; 聚合查询多表查询表数据过大查询深度分页查询 1.2 通…

【Flink精讲】Flink反压调优

Flink 网络流控及反压的介绍&#xff1a; Apache Flink学习网 反压的理解 简单来说&#xff0c; Flink 拓扑中每个节点&#xff08;Task&#xff09;间的数据都以阻塞队列的方式传输&#xff0c;下游来不及消费导致队列被占满后&#xff0c;上游的生产也会被阻塞&#xff0c;…

Jessibuca 插件播放直播流视频

jessibuca官网&#xff1a;http://jessibuca.monibuca.com/player.html git地址&#xff1a;https://gitee.com/huangz2350_admin/jessibuca#https://gitee.com/link?targethttp%3A%2F%2Fjessibuca.monibuca.com%2F 项目需要的文件 1.播放组件 <template ><div i…

Qt项目:网络1

文章目录 项目&#xff1a;网路项目1&#xff1a;主机信息查询1.1 QHostInfo类和QNetworkInterface类1.2 主机信息查询项目实现 项目2&#xff1a;基于HTTP的网络应用程序2.1 项目中用到的函数详解2.2 主要源码 项目&#xff1a;网路 项目1&#xff1a;主机信息查询 使用QHostI…