Redis---基准测试

标签:Redis首次发布:2023-11-12最近修改:2026-08-15
摘要

在 Redis 安装完毕后会自动安装一个 redis-benchmark 测试工具,它可以模拟多个客户端同时向 Redis 发出请求,用于测试 Redis 的性能。可以使用 redis-benchmark --help 查看基准测试参数。当参数使用默认值时,可以省略。

序号 选项 描述 默认值
1 -h 指定服务器主机名 127.0.0.1
2 -p 指定服务器端口 6379
3 -s 指定服务器 socket
4 -c 指定并发连接数 50
5 -n 指定请求数 100000
6 -d 以字节为单位指定 SET/GET 值的数据大小 3
7 -k 1 表示保持连接,0 表示重新建立连接 1
8 -r SET/GET/INCR 使用随机 key,SADD 使用随机值
9 -P 通过管道传输指定数量的请求 1
10 -q 只输出总述性报告
11 --csv 以 CSV 格式输出
12 -l(L 的小写字母) 生成循环,永久执行测试
13 -t 仅运行指定的测试命令列表
14 -I(i 的大写字母) Idle 模式,仅打开指定数量的 idle 连接并等待

测试

命令解析

bash
[study@centos redis]$ redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 200000 -d 5 -t set

这条命令表示:

  • Redis 服务地址:127.0.0.1:6379
  • 并发客户端数:100
  • 总请求数:200000
  • 每个 SET 请求的数据大小:5 字节
  • 只测试 SET 命令

因此,本次测试是在 100 个并发客户端、20 万次请求、5 字节 payload 的条件下测试 Redis SET 命令的性能。

测试环境报告

bash
====== SET ======  200000 requests completed in 2.14 seconds  100 parallel clients  5 bytes payload  keep alive: 1  host configuration "save": 3600 1 300 100 60 10000  host configuration "appendonly": no  multi-thread: no

这部分描述了本次测试的基本情况:

  • 200000 requests completed in 2.14 seconds:20 万次请求在 2.14 秒内完成。
  • 100 parallel clients:测试过程中使用 100 个并发客户端连接。
  • 5 bytes payload:每次操作的数据 payload 为 5 字节。
  • keep alive: 1:客户端会复用连接,而不是每次请求都重新建立连接。
  • host configuration "save": 3600 1 300 100 60 10000:Redis 当前启用了 RDB 快照配置。
  • host configuration "appendonly": no:Redis 没有开启 AOF 持久化。
  • multi-thread: no:本次 Redis 实例没有开启多线程 I/O。

延迟的百分比分布

bash
Latency by percentile distribution:0.000% <= 0.343 milliseconds (cumulative count 2)50.000% <= 0.919 milliseconds (cumulative count 100646)75.000% <= 1.135 milliseconds (cumulative count 151476)87.500% <= 1.231 milliseconds (cumulative count 175144)93.750% <= 1.295 milliseconds (cumulative count 188724)96.875% <= 1.343 milliseconds (cumulative count 193995)98.438% <= 1.487 milliseconds (cumulative count 196895)99.219% <= 2.287 milliseconds (cumulative count 198455)99.609% <= 2.959 milliseconds (cumulative count 199222)99.805% <= 4.791 milliseconds (cumulative count 199612)99.902% <= 5.447 milliseconds (cumulative count 199805)99.951% <= 6.639 milliseconds (cumulative count 199903)99.976% <= 7.671 milliseconds (cumulative count 199952)99.988% <= 8.871 milliseconds (cumulative count 199976)99.994% <= 9.791 milliseconds (cumulative count 199988)99.997% <= 10.239 milliseconds (cumulative count 199994)99.998% <= 10.527 milliseconds (cumulative count 199997)99.999% <= 12.479 milliseconds (cumulative count 199999)100.000% <= 12.743 milliseconds (cumulative count 200000)100.000% <= 12.743 milliseconds (cumulative count 200000)

这里是按照**延迟百分位数(percentile)**统计请求延迟。

例如:

text
50.000% <= 0.919 milliseconds

表示至少 50% 的请求延迟不超过 0.919 ms,这个值对应本次测试的 P50。

同理:

text
99.999% <= 12.479 milliseconds

表示约 99.999% 的请求延迟不超过 12.479 ms

而:

text
100.000% <= 12.743 milliseconds

表示本次统计到的最大延迟为 12.743 ms

cumulative count 表示截至当前延迟阈值,累计统计到的请求数量。

例如:

text
50.000% <= 0.919 millisecondscumulative count 100646

表示有 100646 个请求的延迟不超过 0.919 ms

注意:这里不是“每完成一次剩余测试量的 50% 就统计一次”。这些百分比表示请求延迟的百分位点,用于描述整个请求延迟分布。

延迟的累积分布

bash
Cumulative distribution of latencies:0.000% <= 0.103 milliseconds (cumulative count 0)0.015% <= 0.407 milliseconds (cumulative count 31)0.053% <= 0.503 milliseconds (cumulative count 107)1.373% <= 0.607 milliseconds (cumulative count 2746)9.748% <= 0.703 milliseconds (cumulative count 19497)23.220% <= 0.807 milliseconds (cumulative count 46440)47.679% <= 0.903 milliseconds (cumulative count 95358)60.781% <= 1.007 milliseconds (cumulative count 121561)71.803% <= 1.103 milliseconds (cumulative count 143607)84.682% <= 1.207 milliseconds (cumulative count 169364)95.002% <= 1.303 milliseconds (cumulative count 190004)97.965% <= 1.407 milliseconds (cumulative count 195929)98.520% <= 1.503 milliseconds (cumulative count 197041)98.834% <= 1.607 milliseconds (cumulative count 197667)98.976% <= 1.703 milliseconds (cumulative count 197951)99.031% <= 1.807 milliseconds (cumulative count 198061)99.062% <= 1.903 milliseconds (cumulative count 198124)99.096% <= 2.007 milliseconds (cumulative count 198193)99.131% <= 2.103 milliseconds (cumulative count 198262)99.635% <= 3.103 milliseconds (cumulative count 199269)99.721% <= 4.103 milliseconds (cumulative count 199443)99.863% <= 5.103 milliseconds (cumulative count 199726)99.931% <= 6.103 milliseconds (cumulative count 199862)99.965% <= 7.103 milliseconds (cumulative count 199930)99.981% <= 8.103 milliseconds (cumulative count 199962)99.989% <= 9.103 milliseconds (cumulative count 199978)99.996% <= 10.103 milliseconds (cumulative count 199992)99.999% <= 11.103 milliseconds (cumulative count 199998)100.000% <= 13.103 milliseconds (cumulative count 200000)

这里描述的是延迟的累积分布

例如:

text
95.002% <= 1.303 millisecondscumulative count 190004

表示约 95.002% 的请求延迟不超过 1.303 ms,对应累计请求数为 190004

再例如:

text
100.000% <= 13.103 millisecondscumulative count 200000

表示所有 20 万个请求的延迟都不超过 13.103 ms

注意:这里不应该简单描述成“每 0.1 毫秒统计一次”。从实际输出可以看到,统计点并不是严格固定的 0.1 ms 间隔,因此更准确的说法是:按照不同的延迟区间统计累计请求数量和累计百分比。

总述报告

bash
Summary:  throughput summary: 93457.94 requests per second  latency summary (msec):          avg       min       p50       p95       p99       max        0.984     0.336     0.919     1.303     1.743    12.743

这是本次基准测试最值得关注的一部分。

吞吐量

text
93457.94 requests per second

表示本次测试 Redis SET 命令的吞吐量约为:

93457.94 requests/s,约 9.35 万 QPS。

这个结果也可以通过测试总请求数和测试耗时进行简单校验:

text
200000 / 2.14 ≈ 93458 requests/s

因此与 redis-benchmark 输出的:

text
93457.94 requests per second

基本一致。

延迟摘要

指标 数值(ms) 含义
avg 0.984 所有请求的平均延迟
min 0.336 统计到的最小请求延迟
p50 0.919 50% 的请求延迟不超过该值
p95 1.303 95% 的请求延迟不超过该值
p99 1.743 99% 的请求延迟不超过该值
max 12.743 统计到的最大请求延迟

具体来说:

  • avg = 0.984 ms:平均请求延迟约为 0.984 ms
  • min = 0.336 ms:本次测试观察到的最小请求延迟。
  • p50 = 0.919 ms:50% 的请求延迟不超过 0.919 ms
  • p95 = 1.303 ms:95% 的请求延迟不超过 1.303 ms
  • p99 = 1.743 ms:99% 的请求延迟不超过 1.743 ms
  • max = 12.743 ms:本次测试观察到的最大请求延迟。

这里有一点需要特别修正:

min 不是“第一个请求的耗时”,max 也不是“最后一个请求的耗时”。

它们分别表示整个测试过程中观察到的最小延迟和最大延迟

同样,P50/P95/P99 应理解为整个请求延迟分布对应的百分位,而不是简单地把第 100000190000198000 个请求直接当作最终结果。

Comments

评论区将在滚动到这里时加载。