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

文章目录

  • [1. 前言](#1. 前言)
  • [2. Redis性能测试工具](#2. Redis性能测试工具)
    • [2.1 Redis-benchmark](#2.1 Redis-benchmark)
      • [2.1.1 何为Redis-benchmark](#2.1.1 何为Redis-benchmark)
      • [2.1.2 Redis-benchmark的特点](#2.1.2 Redis-benchmark的特点)
      • [2.1.3 如何使用Redis-benchmark](#2.1.3 如何使用Redis-benchmark)
      • 可选的参数
    • [2.2 Memtier_benchmark](#2.2 Memtier_benchmark)
      • [2.2.1 何为Memtier_benchmark](#2.2.1 何为Memtier_benchmark)
      • [2.2.2 Memtier_benchmark的特点](#2.2.2 Memtier_benchmark的特点)
      • [2.2.3 如何使用Memtier_benchmark](#2.2.3 如何使用Memtier_benchmark)
    • [2.3 自定义脚本工具](#2.3 自定义脚本工具)
      • [2.3.1 自定义脚本工具的优势](#2.3.1 自定义脚本工具的优势)
      • [2.3.2 自定义脚本工具的实现方式](#2.3.2 自定义脚本工具的实现方式)
      • [2.3.3 实例展示自定义脚本的使用](#2.3.3 实例展示自定义脚本的使用)
  • [6. 参考资料](#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次请求的测试。

bash 复制代码
$ redis-benchmark -n 10000  -q

PING_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.1 127.0.0.1
-p 指定服务器端口 6379 6379
-s 指定服务器套接字 /tmp/redis.sock
-c 设置并发连接数 50 50
-n 设置请求总数 100000 100000
-d 设置数据大小(以字节为单位) 3 2
-k 是否重用连接(1=是,0=否) 1 1
-r 使用随机键(1=是,0=否) 1 0
-P 通过管道发送请求 1 1
-t 只运行给定的测试用例 set,lpush 全部测试用例
-l 循环运行测试 只运行一次
--threads 使用指定数量的线程 2 1
--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的使用也非常直接,通过命令行即可启动。例如:

shell 复制代码
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 服务器。

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

sh 复制代码
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 服务器在本地运行。执行上述命令后,将会看到如下模拟输出结果:

shell 复制代码
[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库编写测试脚本,如下:

python 复制代码
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 官方文档
相关推荐
SkyWalking中文站20 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ1 天前
Kubeneters HA Cluster部署
运维
江华森1 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森1 天前
Matplotlib 数据绘图基础入门
运维
江华森1 天前
NumPy 数值计算基础入门
运维
用户3074596982072 天前
Redis 延时队列详解
redis
烤代码的吐司君2 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
leeyi4 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
云技纵横5 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
乘云数字DATABUFF5 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端