Redis 性能测试

Redis 性能测试全攻略(2025 版)

目标:量化 Redis 吞吐量、延迟、资源消耗,为容量规划、架构选型、故障排查提供依据。


1. 性能指标体系(KPI)

指标单位说明典型阈值
OPS (Operations Per Second)QPS每秒命令数5W ~ 100W+
P99 延迟ms99% 请求耗时< 1ms(内网)
CPU 使用率%单核/多核< 70% 可持续
内存使用GBused_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-benchmarkC官方、轻量快速对比
memtier_benchmarkCFacebook 开源,支持 pipeline、多线程生产级测试
redis-perf / rpGo高并发,支持 Lua极限压测
YCSBJava标准云基准跨数据库对比

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-sizeValue 大小
--key-patternR: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)

场景OPSP99 延迟
SET/GET 小 key80W+0.6ms
Pipeline=16200W+0.3ms
10KB Value15W1.2ms

Redis 7+ 单线程模型:性能瓶颈通常在 CPU 单核网络


5.2 常见瓶颈与调优

瓶颈症状调优手段
CPU 100%INFO cpuused_cpu_sys开启 IO 线程(Redis 6+)
io-threads 4
io-threads-do-reads yes
网络饱和网卡 1Gbps 满升级 10G 网卡
开启 Pipeline
使用 Cluster 分片
内存碎片used_memory_rss >> used_memoryACTIVEEDEFRAG 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 ID763, 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 侧车压测性能回归自动化?随时告诉我!

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部