性能测试可以让我们了解 Redis 服务器的性能优劣。在实际的业务场景中,性能测试是必不可少的。在业务系统上线之前,我们都需要清楚地了解 Redis 服务器的性能,从而避免发生某些意外情况,比如数据量过大会导致服务器宕机等。
为了解 Redis 在不同配置环境下的性能表现,Redis 提供了一种性能测试工具 redis-benchmark(也称压力测试工具),它通过同时执行多组命令实现对 Redis 的性能测试。
Redis 性能测试命令 redis-benchmark 的语法如下:
redis-benchmark [option] [option value]选项说明:
option:可选参数,取值如下:
-h 指定服务器主机名,默认值为 127.0.0.1
-p 指定服务器端口,默认值为 6379
-s 指定服务器 socket
-c 指定并发连接数,默认值为 50
-n 指定请求数,默认值为 10000
-d 以字节的形式指定 SET/GET 值的数据大小,默认值为 2
-k 1=keep alive 0=reconnect,默认值为 1
-r SET/GET/INCR 使用随机 key, SADD 使用随机值
-P 通过管道传输 <numreq> 请求,默认值为 1
-q 强制退出 redis。仅显示 query/sec 值
--csv 以 CSV 格式输出
-l(L 的小写字母) 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表。
-I(i 的大写字母) Idle 模式。仅打开 N 个 idle 连接并等待。
option value:具体的参数值,如:1000。
注意:
(1)该命令是 Redis 的安装目录下一个可执行的文件(Windows 中 redis-benchmark.exe,Linux 中 redis-benchmark),而不是 Redis 客户端的内部指令。
(2)redis-benchmark 的测试结果和硬件关联比较大,尤其是 CPU 主频的频率。
(1)同时执行 10000 个请求来检测 Redis 性能,如下:
C:\Users\Administrator> redis-benchmark -n 10000 -q
PING_INLINE: 43668.12 requests per second
PING_BULK: 47619.05 requests per second
SET: 44843.05 requests per second
GET: 35714.29 requests per second
INCR: 8403.36 requests per second
LPUSH: 40160.64 requests per second
RPUSH: 44843.05 requests per second
LPOP: 45454.55 requests per second
RPOP: 45454.55 requests per second
SADD: 47846.89 requests per second
HSET: 43478.26 requests per second
SPOP: 48543.69 requests per second
LPUSH (needed to benchmark LRANGE): 38167.94 requests per second
LRANGE_100 (first 100 elements): 18083.18 requests per second
LRANGE_300 (first 300 elements): 8305.65 requests per second
LRANGE_500 (first 450 elements): 5973.72 requests per second
LRANGE_600 (first 600 elements): 4708.10 requests per second
MSET (10 keys): 40322.58 requests per second如果在 redis-cli 中执行 redis-benchmark 命令将抛出错误,如下:
C:\Users\Administrator> redis-cli
127.0.0.1:6379> redis-benchmark -n 10000 -q
(error) ERR unknown command `redis-benchmark`, with args beginning with: `-n`, `10000`, `-q`,(2)该实例使用了多个参数来测试远程服务器上 Redis 的性能,如下:
C:\Users\Administrator>redis-benchmark -h 192.168.116.134 -p 6379 -t set,lpush -n 10000 -q
SET: 13440.86 requests per second
LPUSH: 10183.30 requests per second以上实例中主机为 192.168.116.134,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。
(3)该实例测试 100 个并发连接 100000 请求,如下:
C:\Users\Administrator>redis-benchmark -h 192.168.116.134 -p 6379 -c 100 -n 100000
====== PING_INLINE ======
100000 requests completed in 6.80 seconds # 总耗时
100 parallel clients # 100个并发客户端
3 bytes payload # 每次写入3个字节
keep alive: 1 # 目前只有一台服务器来处理这些请求,是单机性能
0.00% <= 1 milliseconds
0.01% <= 2 milliseconds
0.03% <= 3 milliseconds
0.04% <= 4 milliseconds
0.09% <= 5 milliseconds
15.15% <= 6 milliseconds
76.15% <= 7 milliseconds
92.46% <= 8 milliseconds
95.64% <= 9 milliseconds
97.14% <= 10 milliseconds # 97% 的请求小于 10 毫秒
97.88% <= 11 milliseconds
98.55% <= 12 milliseconds
99.16% <= 13 milliseconds
99.64% <= 14 milliseconds
99.81% <= 15 milliseconds
99.87% <= 16 milliseconds
99.95% <= 17 milliseconds
99.98% <= 18 milliseconds
99.99% <= 19 milliseconds
99.99% <= 20 milliseconds
99.99% <= 21 milliseconds
100.00% <= 22 milliseconds
100.00% <= 23 milliseconds
100.00% <= 23 milliseconds # 所有请求在 23 毫秒内
14705.88 requests per second # 每秒处理 14705.88 个请求
====== PING_BULK ======
100000 requests completed in 6.67 seconds
100 parallel clients
3 bytes payload
keep alive: 1
...