【运维篇】Redis 性能测试工具实践

文章目录

  • 1. 前言
  • 2. Redis性能测试工具
    • 2.1 Redis-benchmark
      • 2.1.1 何为Redis-benchmark
      • 2.1.2 Redis-benchmark的特点
      • 2.1.3 如何使用Redis-benchmark
      • 可选的参数
    • 2.2 Memtier_benchmark
      • 2.2.1 何为Memtier_benchmark
      • 2.2.2 Memtier_benchmark的特点
      • 2.2.3 如何使用Memtier_benchmark
    • 2.3 自定义脚本工具
      • 2.3.1 自定义脚本工具的优势
      • 2.3.2 自定义脚本工具的实现方式
      • 2.3.3 实例展示自定义脚本的使用
  • 6. 参考资料

在这里插入图片描述

1. 前言

在评估 Redis 的性能时,使用正确的工具至关重要,因为它们可以帮助我们模拟各种场景并获取关键性能指标。在本篇博文中,我们将重点介绍两种流行的 Redis 性能测试工具:redis-benchmarkmemtier_benchmark

redis-benchmark 是 Redis 官方提供的性能测试工具,它非常简单易用且直接集成在 Redis 发行版中。这个工具可以快速提供一个基准,帮助我们了解在默认设置下 Redis 实例的性能概况。通过定制其各种参数,我们可以模拟不同类型的负载并观察 Redis 如何在各种条件下表现。

memtier_benchmark 是另一个强大的开源测试工具,旨在用于评估 NoSQL 系统的性能,包括 Redis。它提供了更复杂的测试场景和细粒度的配置选项,使得测试结果更加详尽和精确。这个工具非常适合那些需要执行高级性能分析和优化的用户。

在这篇博文中,将通过实际的测试案例来展示如何使用这些工具,并解释如何根据测试结果做出相应的系统调整。

2. Redis性能测试工具

性能测试是评估一个系统性能的重要手段,对于Redis这样的内存数据存储和缓存系统来说,性能测试尤为关键。以下是一些常用的Redis性能测试工具及其详细介绍:

2.1 Redis-benchmark

Redis-benchmark是Redis官方提供的性能测试工具,它是一个简单的工具,可以通过执行一系列的基准测试(如:GET、SET操作等)来评估Redis服务器的性能。

2.1.1 何为Redis-benchmark

Redis-benchmark是一个命令行工具,它可以模拟多个客户端对Redis进行操作,并生成性能报告。

2.1.2 Redis-benchmark的特点

  • 易用性:作为Redis的一部分,使用起来非常方便。
  • 测试多种操作:支持多种Redis操作,包括字符串、哈希、列表、集合等数据结构的基本操作。
  • 可配置:可以配置并发连接数、请求数、数据大小等参数,以满足不同的测试需求。
  • 实时报告:测试进行时,可以实时查看QPS(每秒查询数)、延迟等关键指标。

2.1.3 如何使用Redis-benchmark

使用Redis-benchmark非常简单,可以通过命令行直接启动测试。例如:

redis-benchmark -h <redis-host> -p <redis-port> -c 100 -n 10000

这条命令表示用100个并发连接对Redis进行10000次请求的测试。

$ redis-benchmark -n 10000  -qPING_INLINE: 141043.72 requests per second
PING_BULK: 142857.14 requests per second
SET: 141442.72 requests per second
GET: 145348.83 requests per second
INCR: 137362.64 requests per second
LPUSH: 145348.83 requests per second
LPOP: 146198.83 requests per second
SADD: 146198.83 requests per second
SPOP: 149253.73 requests per second
LPUSH (needed to benchmark LRANGE): 148588.42 requests per second
LRANGE_100 (first 100 elements): 58411.21 requests per second
LRANGE_300 (first 300 elements): 21195.42 requests per second
LRANGE_500 (first 450 elements): 14539.11 requests per second
LRANGE_600 (first 600 elements): 10504.20 requests per second
MSET (10 keys): 93283.58 requests per second

可选的参数

参数名称描述示例值默认值
-h指定服务器主机名127.0.0.1127.0.0.1
-p指定服务器端口63796379
-s指定服务器套接字/tmp/redis.sock
-c设置并发连接数5050
-n设置请求总数100000100000
-d设置数据大小(以字节为单位)32
-k是否重用连接(1=是,0=否)11
-r使用随机键(1=是,0=否)10
-P通过管道发送请求11
-t只运行给定的测试用例set,lpush全部测试用例
-l循环运行测试只运行一次
--threads使用指定数量的线程21
--csv将结果输出为CSV格式输出为普通文本格式
--latency-history记录并显示延迟统计的历史变化关闭
--latency-dist显示延迟分布而不是平均值和百分比关闭
--percentile显示延迟百分比95关闭
--cluster启用Redis集群模式的基准测试非集群模式
--help查看帮助信息
--version显示版本信息

该表格是针对Redis-benchmark工具的常用参数进行的总结。使用这些参数可以调整性能测试的各种条件,以适应不同的测试场景和需求。

2.2 Memtier_benchmark

memtier_benchmark 是一个高性能负载生成器,常用于对存储和缓存系统(如 Redis、Memcached 等)进行性能测试和基准评估。它由 Redis Labs 开发,支持多种测试模式和参数配置,以模拟不同的负载和客户端行为。

以下是 memtier_benchmark 的一些主要特性和参数的详解:

主要特性:

  • 支持多种协议,包括 Redis 和 Memcached。
  • 可以模拟多个客户端和并发连接。
  • 支持数据大小和请求模式的自定义。
  • 提供详细的性能报告,包括吞吐量、延迟等统计信息。

常用参数:

  • -s, --server: 指定服务器的 IP 地址或主机名。
  • -p, --port: 指定服务器的端口号。
  • -P, --protocol: 指定使用的协议(redis/memcache)。
  • -c, --clients: 设置并发客户端的数量。
  • -t, --threads: 设置线程的数量。
  • -n, --requests: 指定每个客户端发送的请求总数。
  • --ratio: 设置读写操作的比例(例如 1:10 表示 1 个写操作对应 10 个读操作)。
  • -d, --data-size: 设置每个请求的数据大小(以字节为单位)。
  • --key-pattern: 设置键的模式(例如 R:R 表示随机的键和随机的值)。
  • --key-prefix: 为所有键添加前缀。
  • --key-minimum--key-maximum: 设置键的最小和最大大小。
  • --random-data: 设置是否使用随机生成的数据。
  • --pipeline: 设置管道请求的大小(即一次发送多少个请求)。
  • --hide-histogram: 隐藏延迟直方图信息。
  • --version: 显示版本信息。
  • -h, --help: 显示帮助信息。

memtier_benchmark 提供了灵活的命令行界面,允许用户根据测试目标和环境来配置大量参数。使用合适的配置能够模拟真实世界中的负载场景,从而得到有意义的性能测试结果。

2.2.1 何为Memtier_benchmark

Memtier_benchmark是一个由Redis Labs维护的开源工具,它不仅支持Redis,还支持Memcached等其他数据库。

2.2.2 Memtier_benchmark的特点

  • 高性能:设计上注重性能,能够在相同硬件上产生更多的负载。
  • 灵活配置:支持多种参数配置,可以模拟不同的客户端和负载类型。
  • 详细的统计信息:提供详细的性能报告,包括但不限于吞吐量、延迟直方图等。

2.2.3 如何使用Memtier_benchmark

Memtier_benchmark的使用也非常直接,通过命令行即可启动。例如:

memtier_benchmark -s <redis-host> -p <redis-port> -c 50 -t 4 --ratio=1:10

这个命令用50个客户端和4个线程来测试Redis,操作比率为1个SET对应10个GET。

为了模拟执行 memtier_benchmark 并输出模拟结果,我们将进行一个简单的示例,假设我们正在测试本地运行的 Redis 服务器。

打开终端并执行以下命令:

memtier_benchmark -s 127.0.0.1 -p 6379 -c 50 -t 4 -n 10000 --ratio=1:10 -d 100 --key-pattern=R:R

这条命令表示:

  • -s 127.0.0.1: 连接到本地主机上的服务器。
  • -p 6379: 使用 Redis 默认端口号 6379。
  • -c 50: 使用 50 个并发客户端。
  • -t 4: 使用 4 个线程。
  • -n 10000: 每个客户端发送 10000 个请求。
  • --ratio=1:10: 设置 1 个写(set)操作对应 10 个读(get)操作。
  • -d 100: 每个请求的数据大小设置为 100 字节。
  • --key-pattern=R:R: 使用随机键和随机值的模式。

假设 memtier_benchmark 已经安装,并且有一个 Redis 服务器在本地运行。执行上述命令后,将会看到如下模拟输出结果:

[RUN #1] Preparing benchmark client...
[RUN #1] Launching threads now...
[RUN #1 50%, 5001 secs] 1 threads: 250050 ops, 49976 (avg: 49976) ops/sec, 4.96MB/sec (avg: 4.96MB/sec), 1.00 msec (avg: 1.00 msec) [READ: 1.00 msec, WRITE: 1.00 msec]
[RUN #1 100%, 10001 secs] 1 threads: 500050 ops, 50076 (avg: 50026) ops/sec, 5.00MB/sec (avg: 4.98MB/sec), 1.00 msec (avg: 1.00 msec) [READ: 1.00 msec, WRITE: 1.00 msec]ALL STATS
========================================================================
Type         Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets         4545.45     ---        ---            1.00000       444.44
Gets        45454.55    36363.64    9090.91        1.00000      4444.44
Waits        0.00       ---        ---            0.00000       0.00
Totals      50000.00    36363.64    9090.91        1.00000      4888.89

上述输出结果提供了以下信息:

  • 操作的总数和每秒操作数(Ops/sec)。
  • 命中和未命中的次数(Hits/sec 和 Misses/sec)。
  • 平均延迟(Latency)。
  • 每秒传输的数据量(KB/sec)。

这样的输出结果有助于评估 Redis 服务器在给定负载下的性能,包括处理请求的速度、有效性和效率。请注意,上述数字是模拟的,并非实际运行结果。实际执行时,结果会根据服务器配置和性能而有所不同。

2.3 自定义脚本工具

除了上述通用工具外,根据具体的测试需求,开发者有时也会编写自定义的性能测试脚本。

2.3.1 自定义脚本工具的优势

  • 灵活性:可以根据特定的业务逻辑编写测试脚本,以准确模拟实际的业务场景。
  • 特定功能测试:有时候需要测试Redis的某些特定功能或者命令,自定义脚本可以专注于这些特定的需求。

2.3.2 自定义脚本工具的实现方式

自定义脚本通常使用高级语言编写,如Python、Ruby等,结合Redis客户端库来实现特定的测试逻辑。

2.3.3 实例展示自定义脚本的使用

以Python为例,可以使用redis-py库编写测试脚本,如下:

import redis
import time# 连接到Redis
r = redis.Redis(host='localhost', port=6379, db=0)# 执行测试操作
start_time = time.time()
for i in range(10000):r.set('key{}'.format(i), 'value{}'.format(i))
end_time = time.time()print(f"Total time for 10000 SET operations: {end_time - start_time} seconds")

这段脚本测试了10000次SET操作的总耗时。

Redis性能测试工具的选择取决于你的需求,Redis-benchmark和Memtier_benchmark适用于泛型的性能测试,而自定义脚本则更适合针对具体业务场景的深度测试。

6. 参考资料

  1. Memtier_benchmark GitHub:
  2. Redis 官方文档

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

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

相关文章

【AI视野·今日Robot 机器人论文速览 第六十五期】Mon, 30 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 30 Oct 2023 Totally 18 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Gen2Sim: Scaling up Robot Learning in Simulation with Generative Models Authors Pushkal Katara, Zhou Xian, Katerina F…

网工内推 | 国企、港企网工,年底双薪,NA以上认证即可

01 中航期货有限公司 招聘岗位&#xff1a;信息技术部-网络工程师 职责描述&#xff1a; 1、负责总部、分支机构、外联单位网络的日常运维、故障和应急处置&#xff0c;特别是定期监测设备的运行状态&#xff0c;对存在隐患的地方及时发现改正&#xff0c;保持网络稳定通畅&am…

React 中 react-i18next 切换语言( 项目国际化 )

背景 平时中会遇到需求&#xff0c;就是切换语言&#xff0c;语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件&#xff0c;然后将插件引入到项目&#xff0c;然后配置语言包&#xff08;语言包需要你自己来进行配置&#xff0c;自己编写语言包&#xff…

接口自动化项目落地之HTTPBin网站

原文&#xff1a;https://www.cnblogs.com/df888/p/16011061.html 接口自动化项目落地系列 找个开源网站或开源项目&#xff0c;用tep实现整套pytest接口自动化项目落地&#xff0c;归档到电子书&#xff0c;作为tep完整教程的项目篇一部分。自从tep完整教程发布以后&#…

C语言:结构体

目录 结构体类型的声明 匿名结构体 全局结构体变量 嵌套结构体 访问结构体成员 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体内存对齐规则 修改默认对齐数 #pragma pack(n) offsetof 求结构体成员相对于结构体开头的偏移量的宏。 为什么存在内存…

pip list 和 conda list的区别

PS : 网上说conda activate了之后就可以随意pip了 可以conda和pip混用 但是安全起见还是尽量用pip 这样就算activate了&#xff0c;进入base虚拟环境了 conda与pip的区别 来源 Conda和pip通常被认为几乎完全相同。虽然这两个工具的某些功能重叠&#xff0c;但它们设计用于不…

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

庖丁解牛:NIO核心概念与机制详解 06 _ 连网和异步 I/O

文章目录 Pre概述异步 I/OSelectors打开一个 ServerSocketChannel选择键内部循环监听新连接接受新的连接删除处理过的 SelectionKey传入的 I/O回到主循环 Pre 庖丁解牛&#xff1a;NIO核心概念与机制详解 01 庖丁解牛&#xff1a;NIO核心概念与机制详解 02 _ 缓冲区的细节实现…

如何将本地Portainer管理界面结合cpolar内网穿透工具实现远程浏览器访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

Android修行手册-POI操作中文API文档

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

redis三种集群方式

redis有三种集群方式&#xff1a;主从复制&#xff0c;哨兵模式和集群。 1.主从复制 主从复制原理&#xff1a; 从服务器连接主服务器&#xff0c;发送SYNC命令&#xff1b; 主服务器接收到SYNC命名后&#xff0c;开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

键盘方向键移动当前选中的table单元格,并可以输入内容

有类似于这样的表格&#xff0c;用的<table>标签。原本要在单元格的文本框里面输入内容&#xff0c;需要用鼠标一个一个去点以获取焦点&#xff0c;现在需要不用鼠标选中&#xff0c;直接用键盘的上下左右来移动当前正在输入的单元格文本框。 const currentCell React.u…

【数据结构初阶】单链表SLlist

描述 不同于顺序表&#xff0c;顺序表的数据是存储在一个连续的空间里的 而链表它是链接起来的结构体地址。 所以我们不用像顺序表一样先创建一块空间出来&#xff0c;而是创建一个能存数据节点和节点与下一个节点之间的连接&#xff1b; 所以&#xff1a;“一个能存数据节点…

词向量笔记

一、词向量的世界排名比赛MTEB MTEB: Massive Text Embedding Benchmark 二、词向量的维数 词向量的维数d1一般取20~500之间

百分点科技|怎样做数据运营,才能让数据中台真正用起来?

导读&#xff1a;大多数企业用户已完成数据平台初步建设工作&#xff0c;但数据在业务运营和管理中没有发挥应有价值。数据开发工作繁重&#xff0c;数据质量问题严重&#xff0c;IT、数据和业务协作不畅&#xff0c;诸多问题依然困扰着企业用户的IT部门和数据部门。数据运营成…

起立科技(起鸿)在第25届高交会上展示透明OLED技术创新

第二十五届中国国际高新技术成果交易会 日期&#xff1a;2023年11月15日 地点&#xff1a;福田会展中心7号馆 深圳&#xff0c;2023年11月15日 — 起鸿科技&#xff0c;作为透明OLED领域的引领者&#xff0c;于今日参展了第二十五届中国国际高新技术成果交易会。这一展会将汇…

『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署

『亚马逊云科技产品测评』活动征文&#xff5c;通过lightsail一键搭建Drupal 提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚…

微服务架构中的 熔断和降级

文章目录 熔断判定服务的健康状态服务恢复正常 降级跨服务降级自身服务提供有损服务具体案例分析 熔断 微服务架构中&#xff0c;如果需要保障可用性&#xff0c;其中一个方式就是 熔断。熔断在微服务架构里面是指 当微服务本身出现问题的时候&#xff0c;它会拒绝新的请求&am…

大学生如何免费认证,下载,安装MATLAB

下载 打开学校图书馆官网 选择版本后&#xff0c;点击下载 注册绑定个人认证 前提&#xff01;需要有学校邮箱【以edu.cn结尾的】 进入mathworks官网 注册账户 安装 下载完后&#xff0c;打开 选择&#xff1a;setup 安装程序 勾选&#xff1a;是&#xff1b;选择&#xf…

机器学习第10天:集成学习

文章目录 机器学习专栏 介绍 投票分类器 介绍 代码 核心代码 示例代码 软投票与硬投票 bagging与pasting 介绍 核心代码 随机森林 介绍 代码 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 集成学习的思想是很直观的&#xff1a;多个人判断的结合往往比…