Redis 性能测试全攻略(2025 版)
目标:量化 Redis 吞吐量、延迟、资源消耗,为容量规划、架构选型、故障排查提供依据。
1. 性能指标体系(KPI)
| 指标 | 单位 | 说明 | 典型阈值 |
|---|---|---|---|
| OPS (Operations Per Second) | QPS | 每秒命令数 | 5W ~ 100W+ |
| P99 延迟 | ms | 99% 请求耗时 | < 1ms(内网) |
| CPU 使用率 | % | 单核/多核 | < 70% 可持续 |
| 内存使用 | GB | used_memory | < 80% maxmemory |
| 网络带宽 | MB/s | 进出流量 | < 80% 网卡 |
| 连接数 | 个 | connected_clients | < 10k(单实例) |
2. 官方基准测试工具:redis-benchmark
2.1 基本用法
redis-benchmark -h 127.0.0.1 -p 6379 -a password -t set,get -n 1000000 -c 100 -P 16
| 参数 | 说明 |
|---|---|
-h | 主机 |
-p | 端口 |
-a | 密码 |
-t | 测试命令(set,get,incr,lpush,rpop,lrange_100等) |
-n | 总请求数 |
-c | 并发客户端数 |
-P | 管道深度(pipeline) |
-r | 随机 key 范围 |
-d | 数据大小(SET/GET) |
-q | 静默模式,只显示 OPS |
2.2 常用测试场景
# 1. 基础 SET/GET
redis-benchmark -t set,get -n 1000000 -c 200 -q
# 2. Pipeline 加速
redis-benchmark -n 1000000 -c 50 -P 16 -t set,get -q
# 3. 大 Value(10KB)
redis-benchmark -t set,get -d 10000 -n 100000 -c 50 -q
# 4. List 操作
redis-benchmark -t lpush,rpop -n 1000000 -c 100 -q
# 5. 混合负载(推荐)
redis-benchmark -t set,get,incr,sadd,hset -n 2000000 -c 200 -r 1000000 -q
3. 高级测试工具对比
| 工具 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
redis-benchmark | C | 官方、轻量 | 快速对比 |
| memtier_benchmark | C | Facebook 开源,支持 pipeline、多线程 | 生产级测试 |
redis-perf / rp | Go | 高并发,支持 Lua | 极限压测 |
| YCSB | Java | 标准云基准 | 跨数据库对比 |
4. 生产级压测:memtier_benchmark(推荐)
4.1 安装
# Ubuntu/Debian
sudo apt install memtier-benchmark
# CentOS/RHEL
yum install memtier_benchmark
# 或源码编译
git clone https://github.com/RedisLabs/memtier_benchmark.git
cd memtier_benchmark && autoreconf -ivf && ./configure && make && sudo make install
4.2 核心参数
memtier_benchmark \
--server=127.0.0.1 \
--port=6379 \
--authenticate=password \
--threads=4 \
--clients=50 \
--pipeline=12 \
--ratio=1:9 \
--data-size=128 \
--key-pattern=R:R \
--test-time=300 \
--json-out-file=result.json
| 参数 | 说明 |
|---|---|
--threads | 线程数(建议 = CPU 核数) |
--clients | 每个线程的连接数 |
--pipeline | 管道深度 |
--ratio=1:9 | 写:读 比例 |
--data-size | Value 大小 |
--key-pattern | R:R 随机 key,S:S 顺序 |
--test-time | 持续时间(秒) |
--json-out-file | 输出 JSON 报告 |
4.3 典型测试脚本
#!/bin/bash
HOST="10.0.0.10"
PORT=6379
AUTH="YourStrongP@ssw0rd"
OUT="redis_perf_$(date +%F_%H%M).json"
memtier_benchmark \
--server=$HOST --port=$PORT --authenticate=$AUTH \
--threads=8 --clients=100 --pipeline=16 \
--ratio=1:10 --data-size=256 \
--key-pattern=R:R --test-time=600 \
--json-out-file=$OUT
echo "测试完成,结果:$OUT"
5. 性能调优与瓶颈分析
5.1 单实例极限(6 核 CPU,64GB 内存,SSD)
| 场景 | OPS | P99 延迟 |
|---|---|---|
| SET/GET 小 key | 80W+ | 0.6ms |
| Pipeline=16 | 200W+ | 0.3ms |
| 10KB Value | 15W | 1.2ms |
Redis 7+ 单线程模型:性能瓶颈通常在 CPU 单核 或 网络。
5.2 常见瓶颈与调优
| 瓶颈 | 症状 | 调优手段 |
|---|---|---|
| CPU 100% | INFO cpu 中 used_cpu_sys 高 | 开启 IO 线程(Redis 6+)io-threads 4io-threads-do-reads yes |
| 网络饱和 | 网卡 1Gbps 满 | 升级 10G 网卡 开启 Pipeline 使用 Cluster 分片 |
| 内存碎片 | used_memory_rss >> used_memory | ACTIVEEDEFRAG yes(Redis 4+)重启或 MEMORY PURGE |
| 慢命令 | SLOWLOG GET 有 KEYS, SMEMBERS | 禁用或用 SCAN 替代 |
| 持久化阻塞 | latest_fork_usec 高 | 调小 save 频率使用从库备份 |
6. 监控与可视化
6.1 关键监控指标
redis-cli INFO | grep -E "instantaneous_ops_per_sec|used_cpu|used_memory|rejected_connections|latest_fork_usec"
6.2 Prometheus + Grafana 面板
# redis_exporter
- name: redis_ops
help: Redis instantaneous ops per second
type: gauge
value: instantaneous_ops_per_sec
Grafana 推荐 Dashboard ID:763, 315, 17903
7. 性能测试报告模板
{
"test_time": "2025-11-13 14:30:00",
"redis_version": "7.2.4",
"config": {
"bind": "0.0.0.0",
"maxmemory": "16gb",
"io-threads": 4
},
"benchmark": {
"tool": "memtier_benchmark",
"threads": 8,
"clients": 800,
"pipeline": 16,
"ratio": "1:9",
"duration": 600
},
"results": {
"set_ops": 85234,
"get_ops": 767103,
"total_ops": 852337,
"p99_latency_ms": 0.78,
"cpu_usage": "68%",
"memory_rss": "2.1GB"
}
}
8. 自动化压测(CI/CD 集成)
# GitLab CI 示例
performance_test:
stage: benchmark
script:
- memtier_benchmark ... --json-out-file=result.json
- curl -X POST -F file=@result.json https://benchmark.example.com/upload
only:
- main
9. 最佳实践清单
| 项目 | 检查 |
|---|---|
使用 memtier_benchmark | 替代 redis-benchmark |
| 开启 Pipeline | --pipeline 8~32 |
| 多线程压测 | --threads = CPU 核数 |
| 预热 30s+ | 避免冷启动 |
| 关闭持久化 | 纯性能测试 |
监控 INFO all | 实时观察瓶颈 |
| 多次测试取平均值 | 避免波动 |
10. 一键压测脚本(生产可用)
#!/bin/bash
# redis_perf_test.sh
HOST=${1:-127.0.0.1}
PORT=${2:-6379}
AUTH=${3:-}
THREADS=$(nproc)
CLIENTS=$(( THREADS * 100 ))
DURATION=300
echo "开始压测 Redis: $HOST:$PORT"
echo "线程: $THREADS, 客户端: $CLIENTS, 时长: ${DURATION}s"
memtier_benchmark \
--server=$HOST --port=$PORT ${AUTH:+--authenticate=$AUTH} \
--threads=$THREADS --clients=$CLIENTS --pipeline=16 \
--ratio=1:10 --data-size=128 --key-pattern=R:R \
--test-time=$DURATION \
--show-config --print-percentiles=50,90,99 \
--json-out-file="redis_perf_$(date +%F_%H%M%S).json"
echo "压测完成,结果已保存"
使用:
chmod +x redis_perf_test.sh
./redis_perf_test.sh 10.0.0.10 6379 YourPassword
小结
| 步骤 | 工具 | 目标 |
|---|---|---|
| 1. 快速测试 | redis-benchmark | 初步对比 |
| 2. 生产压测 | memtier_benchmark | 真实负载 |
| 3. 监控分析 | INFO + Grafana | 瓶颈定位 |
| 4. 调优验证 | 重复测试 | 性能提升 |
需要 Redis Cluster 压测、YCSB 标准负载、K8s 侧车压测 或 性能回归自动化?随时告诉我!