在 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 连接并等待 |
测试
命令解析
[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 命令的性能。
测试环境报告
====== 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。
延迟的百分比分布
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)**统计请求延迟。
例如:
50.000% <= 0.919 milliseconds表示至少 50% 的请求延迟不超过 0.919 ms,这个值对应本次测试的 P50。
同理:
99.999% <= 12.479 milliseconds表示约 99.999% 的请求延迟不超过 12.479 ms。
而:
100.000% <= 12.743 milliseconds表示本次统计到的最大延迟为 12.743 ms。
cumulative count 表示截至当前延迟阈值,累计统计到的请求数量。
例如:
50.000% <= 0.919 millisecondscumulative count 100646表示有 100646 个请求的延迟不超过 0.919 ms。
注意:这里不是“每完成一次剩余测试量的 50% 就统计一次”。这些百分比表示请求延迟的百分位点,用于描述整个请求延迟分布。
延迟的累积分布
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)这里描述的是延迟的累积分布。
例如:
95.002% <= 1.303 millisecondscumulative count 190004表示约 95.002% 的请求延迟不超过 1.303 ms,对应累计请求数为 190004。
再例如:
100.000% <= 13.103 millisecondscumulative count 200000表示所有 20 万个请求的延迟都不超过 13.103 ms。
注意:这里不应该简单描述成“每 0.1 毫秒统计一次”。从实际输出可以看到,统计点并不是严格固定的 0.1 ms 间隔,因此更准确的说法是:按照不同的延迟区间统计累计请求数量和累计百分比。
总述报告
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这是本次基准测试最值得关注的一部分。
吞吐量
93457.94 requests per second表示本次测试 Redis SET 命令的吞吐量约为:
93457.94 requests/s,约 9.35 万 QPS。
这个结果也可以通过测试总请求数和测试耗时进行简单校验:
200000 / 2.14 ≈ 93458 requests/s因此与 redis-benchmark 输出的:
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 应理解为整个请求延迟分布对应的百分位,而不是简单地把第 100000、190000、198000 个请求直接当作最终结果。
Comments