Redis 性能测试
性能测试是评估Redis性能的重要手段,本课学习使用redis-benchmark进行测试。
redis-benchmark简介
redis-benchmark是Redis自带的性能测试工具,可以测试Redis的各种操作性能。
基本用法
BASH
# 基本测试(默认100000个请求,50个并发)
redis-benchmark
# 指定主机和端口
redis-benchmark -h 127.0.0.1 -p 6379
# 指定请求数量和并发数
redis-benchmark -n 100000 -c 100
常用参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-h |
主机地址 | 127.0.0.1 |
-p |
端口 | 6379 |
-n |
请求数量 | 100000 |
-c |
并发客户端数 | 50 |
-d |
数据大小(字节) | 3 |
-k |
是否使用keepalive | 1 |
-q |
简洁输出 | false |
-t |
测试的命令 | all |
-P |
管道大小 | 1 |
测试结果解读
输出示例
TEXT
====== SET ======
100000 requests completed in 1.23 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.00% <= 1 milliseconds
99.80% <= 2 milliseconds
100.00% <= 3 milliseconds
81300.81 requests per second
====== GET ======
100000 requests completed in 1.15 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.00% <= 1 milliseconds
99.90% <= 2 milliseconds
100.00% <= 3 milliseconds
86956.52 requests per second
关键指标
| 指标 | 说明 |
|---|---|
| requests per second | 每秒处理的请求数(QPS) |
| 99.00% <= 1 milliseconds | 99%的请求在1毫秒内完成 |
| parallel clients | 并发客户端数 |
| payload | 数据大小 |
常用测试场景
1. 测试SET操作
BASH
# 测试SET操作
redis-benchmark -t set -n 100000 -c 50
# 测试SET操作(使用管道)
redis-benchmark -t set -n 100000 -c 50 -P 10
2. 测试GET操作
BASH
# 测试GET操作
redis-benchmark -t get -n 100000 -c 50
3. 测试特定命令
BASH
# 测试特定命令
redis-benchmark -t set,get,incr,lpush,rpush,lpop,rpop,sadd,hset -n 100000 -c 50
4. 测试管道
BASH
# 使用管道(批量发送命令)
redis-benchmark -t set -n 100000 -c 50 -P 10
# 比较有无管道的性能差异
redis-benchmark -t set -n 100000 -c 50 -P 1
redis-benchmark -t set -n 100000 -c 50 -P 10
redis-benchmark -t set -n 100000 -c 50 -P 100
5. 测试大数据量
BASH
# 测试大数据量
redis-benchmark -t set -n 100000 -c 50 -d 1024
# 测试不同数据大小
redis-benchmark -t set -n 100000 -c 50 -d 64
redis-benchmark -t set -n 100000 -c 50 -d 256
redis-benchmark -t set -n 100000 -c 50 -d 1024
性能优化建议
1. 使用管道
管道可以显著提高性能,减少网络往返:
BASH
# 无管道
redis-benchmark -t set -n 100000 -c 50 -P 1
# 结果:~80000 QPS
# 有管道
redis-benchmark -t set -n 100000 -c 50 -P 10
# 结果:~200000 QPS
2. 使用批量命令
批量命令比单条命令更高效:
BASH
# 单条命令
redis-benchmark -t set -n 100000 -c 50
# 结果:~80000 QPS
# 批量命令(MSET)
redis-benchmark -t mset -n 100000 -c 50
# 结果:~150000 QPS
3. 调整配置
BASH
# 调整最大内存
redis-cli CONFIG SET maxmemory 256mb
# 调整最大客户端连接数
redis-cli CONFIG SET maxclients 10000
# 禁用持久化(测试时)
redis-cli CONFIG SET save ""
redis-cli CONFIG SET appendonly no
性能基准参考
单机性能
| 操作 | QPS(无管道) | QPS(管道P=10) |
|---|---|---|
| SET | 80,000 | 200,000 |
| GET | 90,000 | 250,000 |
| INCR | 85,000 | 220,000 |
| LPUSH | 80,000 | 200,000 |
| LRANGE (100) | 30,000 | 80,000 |
💡 注意: 实际性能取决于硬件配置、网络环境、数据大小等因素。
自定义测试脚本
使用Lua脚本测试
BASH
# 创建测试脚本
cat > test.lua << 'EOF'
for i = 1, 100000 do
redis.call('SET', 'key:' .. i, 'value:' .. i)
end
EOF
# 执行测试
redis-cli --eval test.lua
使用Python测试
PYTHON
import redis
import time
r = redis.Redis(host='localhost', port=6379)
# 测试SET操作
start = time.time()
for i in range(100000):
r.set(f'key:{i}', f'value:{i}')
end = time.time()
print(f'SET: {100000 / (end - start):.0f} QPS')
❓ 常见问题
Q redis-benchmark测试结果和实际生产环境有差异吗?
A 有差异。redis-benchmark是在理想环境下测试,实际生产环境会受到网络、并发、数据大小等因素影响。
Q 如何测试Redis集群的性能?
A 使用redis-benchmark的-c参数指定多个节点,或使用专门的集群测试工具。
Q 管道大小设置多少合适?
A 一般设置10-100,具体取决于网络环境和数据大小。
📖 小节
- redis-benchmark是Redis自带的性能测试工具
- 关键指标:QPS、延迟百分位数
- 使用管道可以显著提高性能
- 批量命令比单条命令更高效
- 实际性能取决于硬件、网络、数据大小等因素
📝 作业
- 基础测试: 使用redis-benchmark测试SET和GET操作
- 管道测试: 比较有无管道的性能差异
- 优化测试: 尝试不同的配置参数,观察性能变化
下一课
下一课我们将学习 Redis 管道技术,了解管道的原理和使用方法。



