Redis社区版性能白皮书
本章节介绍云数据库 Redis 版社区版性能测试的测试环境、测试工具、测试方法与测试结果。
测试环境
数据库
测试环境信息 | 说明 |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
实例版本 | Redis 6.0,6.0.2.5 |
实例架构 | 标准版(双副本)架构,不启用集群,详情请参见标准架构。 |
实例规格 | 由于测试结果受规格影响较小,本次测试以4 GB(redis.shard.large.ce)规格为例,规格详情请参见Redis社区版实例规格。 |
测试客户端
测试环境信息 | 说明 |
部署压测工具的设备 | |
地域和可用区 | 华北3(张家口)地域,可用区A。 |
操作系统 | CentOS 7.2 64位。 |
网络 | 与Redis实例为相同专有网络(VPC),且与Redis实例通过专有网络连接。 |
测试工具
使用开源Redis的redis-benchmark工具进行压测,它是Redis官方的性能测试工具,可以有效地测试Redis服务的性能。本次测试使用的redis-benchmark工具版本为7.2.0。
使用方法
在ECS实例下载Redis源代码,并且编译产生redis-benchmark文件,即可开始测试。安装方法请参见附录:安装redis-cli。
例如测试SET命令的执行性能,测试命令示例如下(启动16个线程、256个连接、3000000个Key、Value取值范围为64字节):
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 10000000 -c 256 -t set -d 64 --threads 16
参数 | 说明 |
-h | Redis实例的内网连接地址。具体操作请参见查看连接地址。 |
-p | Redis实例的服务端口,默认为6379。 |
-a | Redis实例的密码。 说明 如果使用通过控制台创建的账号连接Redis,连接密码格式需为 |
-c | 并发的连接数量。 |
-n | 测试的总请求数量,可设置较大的值以持续压测。 |
-t | 测试的命令,例如SET、GET等。 |
-d | 命令(SET等)所操作的值的数据大小,单位为字节(Byte)。 |
-r | 使用的Key的随机范围,即使用多少个不同Key。 |
--threads | 启动多线程压测,并指定线程个数。 |
参数的更多信息,请参见redis-benchmark。
测试结果
对包括SET、GET等在内的十余种Redis基础命令进行性能测试并给出测试指标,且囊括了不同线程数、不同写入数据大小的场景。
测试指标
测试指标 | 说明 |
QPS | 每秒处理的读写操作数,单位为次/秒。 |
Latency | 操作的平均延迟分布,单位为毫秒(ms)。 |
99th Percentile Latency | 99%操作延迟,指99%操作的最大延迟时间,单位为毫秒(ms)。例如该指标的值为0.5毫秒,表示99%的请求可以在0.5毫秒内被处理。 |
String数据结构
GET
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t get -d 16 --threads 4 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
199653.94
0.483
0.959
128
187488.28
0.499
1.055
256
187195.81
0.514
1.015
1024
178826.91
0.544
1.071
2048
100677.90
0.966
1.487
SET
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t set -d 16 --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
133291.86
1.070
1.863
128
119779.61
1.196
2.039
256
107096.96
1.341
2.191
1024
84319.41
1.701
3.327
2048
54911.87
2.676
11.383
说明由于该实例规格的最大带宽为96 MB/s,当Value长度为1024时,已达到网络带宽的最大值。
MSET
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t mset -d 16 --threads 2 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
41120.11
2.364
5.167
INCR
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t incr --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
146092.05
0.978
1.687
List数据结构
LPUSH
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t lpush -d 16 --threads 2 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
153830.38
0.623
1.191
128
142619.44
0.669
1.239
256
122249.38
0.782
1.431
1024
92267.95
1.082
1.775
LPOP
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t lpop -d 16 --threads 2 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
161908.36
0.601
1.143
128
155593.59
0.622
1.167
256
146106.27
0.664
1.239
1024
123492.37
0.786
1.407
RPUSH
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t rpush -d 16 --threads 2 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
153594.11
0.620
1.135
128
142626.22
0.668
1.247
256
127448.07
0.751
1.327
1024
93583.30
1.029
1.703
RPOP
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t rpop -d 16 --threads 2 -c 100 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
168719.42
0.576
1.127
128
164122.77
0.592
1.143
256
157637.53
0.611
1.167
1024
128816.18
0.755
1.367
Set数据结构
SADD
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t sadd --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
136134.67
1.045
1.735
SPOP
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t spop --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
108053.59
1.329
2.383
Zset数据结构
ZADD
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t zadd --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
86770.40
1.654
2.423
ZPOPMIN
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t zpopmin --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
104286.16
1.378
2.127
Hash数据结构
HSET
测试命令示例:
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -t hset -d 16 --threads 2 -c 150 -n 3000000 -r 30000000
测试结果:
Value长度(字节)
QPS(次/秒)
Average Latency(毫秒)
99th Percentile Latency(毫秒)
16
121163.16
1.184
1.951
128
110905.73
1.291
2.023
256
105995.84
1.347
2.127
1024
76242.76
1.900
3.359