Redis压力测试——redis-benchmark

2023-11-10

1、redis-benchmark简介

​ redis-benchmark是官方自带的Redis性能测试工具,用来测试Redis在当前环境下的读写性能。在使用Redis的时候,服务器的硬件配置、网络状况、测试环境都会对Redis的性能有所影响,我们需要对Redis实时测试以确定Redis的实际性能。

  • 语法格式:
redis-benchmark [参数] [参数值]
  • 参数列表:
参数 描述 默认值
-h 指定服务器主机名 127.0.0.1
-p 指定服务器端口 6379
-s 指定服务器 socket
-c 指定并发连接数 50
-n 指定请求数 10000
-d 以字节的形式指定 SET/GET 值的数据大小 2
-k 1=keep alive 0=reconnect 1
-r SET/GET/INCR 使用随机 key, SADD 使用随机值
-P 通过管道传输 请求 1
-q 强制退出 redis。仅显示 query/sec 值
–csv 以 CSV 格式输出
-l 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表。
-I Idle 模式。仅打开 N 个 idle 连接并等待。
1.1、Redis安装

​ 测试系统是CentOS7.X版本的,需要确保c++环境已经安装,执行【gcc -v】查看系统是否有gcc环境,如果没有使用yum安装,windows版本可以跳过这步。

  • 安装gcc
yum install gcc-c++
  • 安装redis

redis下载地址:https://pan.baidu.com/s/13kHH-zU7vmh0YobyxhEmow,提取码:dmnx,下载后上传到服务器目录中。

# 解压
tar -zxf redis-4.0.14.tar.gz
# 进入解压目录
cd redis-4.0.14
# 编译
make
# 安装redis到/usr/local/redis
make install PREFIX=/usr/local/redis
# 复制配置文件到刚才的安装目录
cp redis.conf /usr/local/redis/

# 进入安装后的目录
cd /usr/local/redis
# 修改配置文件
vim redis.conf

# Redis后台启动
修改 daemonize 为 yes
# Redis服务器可以跨网络访问
修改 bind 为 0.0.0.0
# 开启aof持久化
appendonly yes

# 进入bin目录中启动redis,指定配置文件
cd bin/
./redis-server ../redis.conf
1.2、redis性能测试

​ redis启动后进入到bin目录中,执行以下命令进行性能测试:

# 执行测试性能命令
./redis-benchmark -t set,get -n 100000

说明:因为测试的是本机的redis性能,所以没有指定IP和端口号。

-t:表示执行以逗号分隔的命令,执行的是set操作和get操作,如果不指定具体的值,测试的结果较多

  • 执行结果如下:
====== SET ======
  100000 requests completed in 1.31 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

98.64% <= 1 milliseconds
99.85% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
76335.88 requests per second

====== GET ======
  100000 requests completed in 1.26 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.27% <= 1 milliseconds
100.00% <= 1 milliseconds
79365.08 requests per second

​ 反馈结果:

​ SET部分和GET部分,只需要关注最后一句输出即可,以GET为例,上述输出:79365.08 requests per second,表示每秒的GET命令处理79365.08个请求,也就是QPS为7.9W个。

​ 这里的数据都是理想数据,测试出来的QPS不能代表实际生产的处理能力,在实际生产中,服务器的硬件配置、网络状况、测试环境都会对Redis的性能有所影响。

1.3、TPS、QPS、RT

​ 在描述系统的高并发能力时,经常根据以下三个指标来决定:

  • 响应时间RT:响应时间是指系统对请求作出响应的时间。一个系统通常会提供许多功能,而不同功能的业务逻辑也千差万别,因而不同功能的响应时间也不尽相同。在讨论一个系统的响应时间时,通常是指该系统所有功能的平均时间或者所有功能的最大响应时间
  • 吞吐量TPS:吞吐量是指系统在单位时间内处理请求的数量。不同系统的平均响应时间随用户数增加而增长的速度也不大相同,这也是采用吞吐量来度量并发系统的性能的主要原因。一般而言,吞吐量是一个比较通用的指标,两个具有不同用户数和用户使用模式的系统,如果其最大吞吐量基本一致,则可以判断两个系统的处理能力基本一致。
  • 查询率QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在互联网中,经常用每秒查询率来衡量服务器的性能。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力,查询率通常是针对单机进行压力测试。
1.4、测试Redis性能

​ 在实际生产中,我们需要关心在应用场景中,redis能够处理的QPS是多少。我们需要估计生产的报文大小,使用benchmark工具指定-d数据块大小来模拟:

./redis-benchmark -t get -n 100000 -c 100 -d 2048

​ 指定并发数为100,数据大小为2048字节,在实际生产中,每个业务处理的数据大小不一致,取出一个最大的数据为基数进行测试即可,在程序里将数据的字节大小打印出来,使用redis-benchmark的-d参数指定数据大小。

​ 执行结果:

====== GET ======
  100000 requests completed in 1.37 seconds
  100 parallel clients
  2048 bytes payload
  keep alive: 1

94.15% <= 1 milliseconds
98.86% <= 2 milliseconds
99.80% <= 3 milliseconds
99.90% <= 4 milliseconds
99.92% <= 5 milliseconds
99.93% <= 6 milliseconds
99.96% <= 7 milliseconds
100.00% <= 8 milliseconds
100.00% <= 8 milliseconds
73206.44 requests per second

​ 使用redis客户端登录到redis服务中,执行info命令查看redis的信息

# 使用Redis客户端
./redis-cli
# 在客户端中执行info命令
127.0.0.1:6379> info

查看结果,输出的信息较多,查看# Memory下面的一些信息。

connected_clients:108 #redis连接数
​
used_memory:8367424 # Redis 分配的内存总量 
used_memory_human:7.98M
used_memory_rss:11595776 # Redis 分配的内存总量(包括内存碎片) 
used_memory_rss_human:11.06M
used_memory_peak:8367424
used_memory_peak_human:7.98M #Redis所用内存的高峰值
used_memory_peak_perc:100.48%

​ 需要关注used_memory_peak_human(redis已用内存)和used_memory(分配的内存总量),当used_memory_peak_human接近used_memory时就需要注意了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis压力测试——redis-benchmark 的相关文章

  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • 如何使用 Redis 自动删除与模式匹配的键

    在我的 Redis DB 中 我有很多prefix
  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u
  • memcache、redis 和 ehcache 作为分布式缓存框架的比较 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要做出的决定之一是在我的系统中使用什么缓存框架 有这么多可供选择 我目前正在研究 redis ehcache 和 memcached
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • 执行 SET {Key} 超时,inst: 0,mgr: Inactive,queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

    我正在尝试使用 StackExchange Redis 客户端将 90 KB pdf 文件保存到 Azure Redis 缓存中 我已将该文件转换为字节数组并尝试使用 stringSet 方法保存它并收到错误 Code byte bytes

随机推荐

  • 51单片机的数字时钟系统【含仿真+程序+报告+原理图】

    1 主要功能 该系统由AT89C51单片机 DS1302时钟模块 按键模块 LCD显示模块构成 利用51单片机实现电子时钟的功能 使用DS1302芯片作为计时设备 用LCD1602作为显示设备 按键按下可修改当前时间 按下的时候蜂鸣器会di
  • dao层代码

    dao层 数据接口层 方法层 介于业务逻辑层和数据库之间 进行数据的访问和操作 在实际业务处理过程中 往往需要进行多次数据库的访问 这些访问性质往往是相同的 采用Dao层可以将对数据库访问进行封装 避免经行重复性数据库访问开发操作 同时降低
  • 数据挖掘-为什么进行数据挖掘

    为什么进行数据挖掘 1 进入信息时代 信息时代数据量暴增 社会计算机化和功能强大的数据收集和存储工具导致数据的爆炸式增长 数据的爆炸式增长 广泛可用和巨大数量使得当前时代成为真正的数据时代 急需功能强大和通用的工具 以便从这些海量数据中发现
  • matlab运动背景位移矢量,[Matlab科学绘图] 绘制平面位移云图

    Matlab科学绘图 绘制平面位移云图 Matlab科学绘图 绘制平面位移云图 在用MATLAB做有限元分析的时候 难免需要绘制云图 网上的资料又很少 且不通用 自己实现之后在此记录一下 希望也能帮助到其他人 平台 Win7 Matlab
  • 《雷达系统设计MATLAB仿真》学习

    文章目录 第一章 雷达分类 按频段分类 按波形分类 按用途分类 监视雷达 跟踪雷达 第四章 模糊函数 模糊函数的几点应用 目标分辨情况 测量精度 模糊情况 杂波抑制能力 输出功率波形 第六章 杂波 擦地角 掠射角 下俯角 入射角 海杂波 地
  • 上拉和下拉电阻 [附:OC门与OD门]

    上拉就是通过一个电阻将芯片的一个引脚或线路中的一点接电源正极 Vcc 将该处电平拉向高电平 下拉就是通过一个电阻将芯片的引脚或线路中的一点接地 将该处电平拉向低电平 其主要目的是在电路驱动器关闭时给引脚或线路节点一个固定的默认的电平 上拉电
  • IOS开发笔记 - 调试技巧之自定义宏输出

    这个小技巧是在翻阅别人的代码时候发现的 由于以前学过C 所以知道这里应该是一个神奇的宏把 按alt点进去果然是酱紫 这里是当再DEBUG模式下 调用这个LogMethod的宏时会输出所在方法的方法名及所在行数 运行如下 有了这个宏 调试是不
  • vue中实现在子组件中刷新父组件

    一 首先是父组件 现在父组件中的子组件属性上添加监听事件 signStatusVerdict 二 其次是子组件 发射一个事件给父组件的监听属性 三 最后是父组件 父组件中监听到事件后会执行listenSignStatus方法 执行更新父组件
  • 【数字IC设计】亚稳态与多时钟切换

    数字IC设计 亚稳态与多时钟切换 1 亚稳态的产生与传输 1 1 CMOS反相器的电平传输特性曲线 2 亚稳态的恢复时间与平均无故障时间 3 减小亚稳态的建议 4 多时钟切换电路 本次是与触发器有关的亚稳态以及多时钟系统中的时钟切换问题讲解
  • 【论文】 各高校的毕业论文的Latex模板链接

    title 南京航空航天大学毕业论文 LaTeX 模板 postname date 2018 12 27 23 41 url http www latexstudio net archives 51558 html source 原始链接
  • 文献管理软件Mendeley的优缺点以及下载安装

    文献管理软件Mendeley Mendeley的简介 优点 缺点 Mendeley下载安装 Mendeley的简介 许多科研人员都知道 目前主流的文献管理软件老大哥是Endnote 但是如果你的学校或者科研机构没有购买这个软件的话 你是用不
  • mmocr dataset训练集可视化

    1 可视化效果 这里以dbnet网络训练 icdar2015数据集为例 from mmcv import Config imdenormalize from mmocr datasets import build dataset if na
  • 【python数据挖掘课程】二十五.Matplotlib绘制带主题及聚类类标的散点图

    这是 Python数据挖掘课程 系列文章 希望对您有所 帮助 当我们做聚类分析绘制散点图时 通常会遇到无法区分散点类标的情况 做主题分析时 可能会遇到无法将对应散点的名称 尤其中文名称 添加至图型中 为了解决这两个问题 本文提出了Matpl
  • PowerBI基础——第一天 度量值、新建列及关系函数 多对一及一对多匹配

    简体中文版的PowerBI官网 https powerbi microsoft com zh cn 在Analysis Services Power BI 以及 Excel 中的 Power Pivot中使用的公式表达语言叫做数据分析表达式
  • Fiddler过滤器 Filters 详解

    目录 前言 一 Hosts 过滤 较常用 二 Client Process 过滤 客户端进程过滤 通过配置只过滤 不过滤哪些进程的请求 用的不多 三 Request Headers 根据请求头信息进行过滤 常用 四 Breakpionts
  • 查看磁盘io

    yum y install sysstat 执行 iostat x 1 10 一般 util大于70 I O压力就开始出现了 如果 util越接近100 表明I O压力越大 rrqm s 每秒进行merge的读操作数目 即delta rme
  • element中手动图片上传,附带完整代码

    先展示一张图片效果图片 这种上传时 很常见的 之所以写这篇文章的目的时记录一下 和之前完全不同的上传方式 之前的上传方式 由于
  • 2023华为OD机试Java【报数问题】

    题目 最开始的时候 有100个同学 每个同学都有一个编号 从一到一百 所有的人围城一圈 报数的规则是 从 1 开始报数 如果某个报数为 M 那么他就退出游戏 他的下一个人从 1 重新开始报数 如果最后的人数小于M 则停止游戏 请你计算最后剩
  • 分类、目标检测、语义分割、实例分割的区别

    计算机视觉的任务很多 有图像分类 目标检测 语义分割 实例分割和全景分割等 那它们的区别是什么呢 1 Image Classification 图像分类 图像分类 下图左 就是对图像判断出所属的分类 比如在学习分类中数据集有人 person
  • Redis压力测试——redis-benchmark

    1 redis benchmark简介 redis benchmark是官方自带的Redis性能测试工具 用来测试Redis在当前环境下的读写性能 在使用Redis的时候 服务器的硬件配置 网络状况 测试环境都会对Redis的性能有所影响