Redis 性能测试

性能测试可以让我们了解 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
...
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号