性能测试可以让我们了解 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 ...