redis-benchmark 使用指南:精准测量 Redis 性能
什么是 redis-benchmark
redis-benchmark 是 Redis 官方自带的性能测试工具,用于测试 Redis 在不同条件下的吞吐量(QPS)和延迟。它是评估硬件配置、Redis 版本、部署方案性能的首选工具。
基本用法
redis-benchmark -h 127.0.0.1 -p 6379
默认执行 100000 次请求,50 个并发连接,测试所有核心命令。
常用参数
| 参数 | 说明 | 示例 |
|---|---|---|
| -h | 服务器地址 | -h 127.0.0.1 |
| -p | 端口号 | -p 6379 |
| -c | 并发连接数 | -c 50 |
| -n | 请求总数 | -n 100000 |
| -d | 数据大小(字节) | -d 100 |
| -t | 只测试指定命令 | -t SET,GET,INCR |
| -P | 使用 Pipeline 并发数 | -P 10 |
| -r | 随机 key 的范围 | -r 100000 |
| –csv | 输出 CSV 格式 | –csv |
| –threads | 多线程(Redis 6.0+) | –threads 4 |
| -q | 只显示 QPS 结果 | -q |
典型测试场景
1. 基础性能测试
# 默认测试:所有命令
redis-benchmark -q
# 输出示例
PING_INLINE: 100000.00 requests per second, p50=0.137 msec
PING_BULK: 99999.00 requests per second, p50=0.138 msec
SET: 100000.00 requests per second, p50=0.139 msec
GET: 100001.00 requests per second, p50=0.138 msec
INCR: 100000.00 requests per second, p50=0.140 msec
LPUSH: 100000.00 requests per second, p50=0.141 msec
LPOP: 100000.00 requests per second, p50=0.139 msec
SADD: 100000.00 requests per second, p50=0.140 msec
SPOP: 100000.00 requests per second, p50=0.139 msec
MSET (10 keys): 80000.00 requests per second, p50=0.176 msec
2. 只测试特定命令
redis-benchmark -t SET,GET -n 100000 -c 50
3. 测试不同数据大小的影响
# 测试不同 value 大小的性能
redis-benchmark -d 100 -t SET -n 100000 -q # 100 字节
redis-benchmark -d 1000 -t SET -n 100000 -q # 1KB
redis-benchmark -d 10000 -t SET -n 50000 -q # 10KB
redis-benchmark -d 100000 -t SET -n 10000 -q # 100KB
结果参考(内网环境,千兆网络):
-d 100: 100000 QPS
-d 1000: 95000 QPS
-d 10000: 60000 QPS (网络传输瓶颈)
-d 100000: 12000 QPS (带宽瓶颈明显)
4. 测试 Pipeline 效果
# Pipeline 对性能的提升
redis-benchmark -P 1 -n 100000 -t SET -q # 无 Pipeline
redis-benchmark -P 10 -n 100000 -t SET -q # 每次发 10 条
redis-benchmark -P 50 -n 100000 -t SET -q # 每次发 50 条
结果参考:
-P 1: 100000 QPS
-P 10: 500000 QPS (5x)
-P 50: 800000 QPS (8x)
5. 测试随机 key 的性能
# 使用随机 key 模拟真实场景(避免热点 key)
redis-benchmark -t SET,GET -r 100000 -n 200000
-r 100000 表示 key 的随机范围是 0-99999,模拟实际业务中访问不同 key 的场景。
6. 多线程测试(Redis 6.0+)
# 测试多线程 IO
redis-benchmark --threads 4 -n 1000000 -c 50
7. 延迟测试
# 测试延迟百分位
redis-benchmark -n 100000 -c 50 --latency
# 或使用独立的延迟测试命令
redis-cli --latency -h 127.0.0.1 -p 6379
# 输出:min: 0, max: 1, avg: 0.19 (毫秒)
高级测试场景
模拟混合负载
# 模拟读写混合(80% 读 20% 写)
redis-benchmark -t GET,SET -n 100000 -r 100000 \
--ratio 80:20
自定义脚本测试
# 使用 Lua 脚本进行复杂场景测试
redis-benchmark -n 100000 eval "redis.call('SET',KEYS[1],ARGV[1])" 1 __rand_int__ __rand_int__
CSV 输出用于分析
redis-benchmark -t SET,GET -n 100000 -c 50 --csv > benchmark.csv
# CSV 内容示例
"SET","99999.99"
"GET","100000.01"
测试结果解读
典型服务器 QPS 参考
| 硬件配置 | SET QPS | GET QPS | Pipeline(P=10) |
|---|---|---|---|
| 单核 CPU, 1GB | 5-8 万 | 8-10 万 | 30-50 万 |
| 4 核 CPU, 4GB | 8-12 万 | 10-15 万 | 40-80 万 |
| 8 核 CPU, 8GB | 10-15 万 | 15-20 万 | 80-120 万 |
| 16 核 CPU, 16GB | 15-20 万 | 20-30 万 | 100-200 万 |
延迟参考
本地 Unix Socket: p50 < 0.05ms, p99 < 0.1ms
内网同可用区: p50 < 0.2ms, p99 < 0.5ms
跨可用区: p50 < 2ms, p99 < 5ms
公网: p50 > 10ms
常见问题与优化建议
测试结果偏低怎么办
- 检查是否绑定了 CPU:确保 Redis 绑定到高性能 CPU 核心
- 检查网络:使用 redis-cli –latency 测试基础延迟
- 检查其他负载:top 命令检查是否有其他进程争抢资源
- 调整测试参数:增大 -c(并发数)和 -n(请求数)
- 使用 Pipeline:-P 参数可以显著提升 QPS
注意测试的陷阱
- 预热 Hot Key:
--key-prefix确保 key 随机分布 - 不要只测单一命令:实际的负载是多命令混合
- 测试环境与生产环境:保持一致的硬件配置
# 推荐的全面测试方案
redis-benchmark \
-h localhost -p 6379 \
-c 50 \ # 50 并发
-n 100000 \ # 10 万请求
-d 100 \ # 100 字节数据
-r 100000 \ # 10 万随机 key
-P 1 \ # 无 Pipeline
-t SET,GET,INCR,LPUSH,LPOP \ # 混合命令
--csv \ # 输出 CSV
> redis_benchmark_$(date +%Y%m%d).csv
面试要点
- redis-benchmark 是官方工具,直接随 Redis 安装
- -c(并发数)和 -n(请求总数)是最常用参数
- -d(数据大小)影响带宽测试结果
- -P(Pipeline)能显著提升 QPS 测试值
- –csv 输出便于做历史对比分析
- 测试结果受网络、CPU、内存带宽多方影响
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容