redis-benchmark 使用指南:精准测量 Redis 性能

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

常见问题与优化建议

测试结果偏低怎么办

  1. 检查是否绑定了 CPU:确保 Redis 绑定到高性能 CPU 核心
  2. 检查网络:使用 redis-cli –latency 测试基础延迟
  3. 检查其他负载:top 命令检查是否有其他进程争抢资源
  4. 调整测试参数:增大 -c(并发数)和 -n(请求数)
  5. 使用 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
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容