民工哥死磕Redis教程(二十一 ):性能测试及相关工具使用

为什么需要性能测试?

性能测试可以让我们了解 Redis 服务器的性能优劣。在实际的业务场景中,性能测试是必不可少的。在业务系统上线之前,我们都需要清楚地了解 Redis 服务器的性能,从而避免发生某些意外情况,比如数据量过大会导致服务器宕机等。

本文将介绍几种不同的方式对Redis的性能进行相关的测试,大家可以根据自己的实际使用需求来选择不同的工具。

redis-benchmark 介绍

为了解 Redis 在不同配置环境下的性能表现,Redis 提供了一种性能测试工具 redis-benchmark(也称压力测试工具),它通过同时执行多组命令实现对 Redis 的性能测试。

语法格式

redis-benchmark [option] [option value]

option #可选参数。
option value #具体的参数值。

注意:该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令。

参数说明

Usage: redis-benchmark [-h ] [-p ] [-c ] [-n ] [-k ]

-h       #设置redis服务端 IP (default 127.0.0.1)   
-p           #设置redis服务端 端口 (default 6379)
-a       #设置redis服务端 密码
-c        #设置多少个redis客户端并发连接redis服务端 (default 50)
-d           #设置每次SET/GET值的数据大小,默认3字节 “VXK” (default 3)
-n       #设置请求总数,若默认50个客户端,每个客户端只需要请求2000次 (default 100000)
-q                 #只显示每种类型测试 读/写 的秒数(不会输出大片测试过程)
-l                 #闭环模式,测试完后,循环上一次测试,(就是命令永远循环)
-r    #设置指定数量的键;对SET/GET/INCR使用随机键,对SADD使用随机值,ZADD的随机成员和分数。
                   # 注:-r会被应用到key和counter键,并且拼接12位后缀标识为多少个;如 "key:000000000008" 代表生成的第八个键
-P         #选项代表每个请求pipeline的数据量. Default 1 (no pipeline).
-t          #设置选择性的测试操作,它只会对我们指定的命令测试 如 -t SET,SPOP,LPUSH (低版本只能测试17个命令)            注:看下面的性能测试方式,选择其中指定方式测试
-I                 #空闲模式。只需打开N个空闲连接并等待
-s         #Server socket (覆盖主机和端口)
-k        #1=保持活动状态 0=重新连接 (default 1)
                   # 注:默认测试是一旦第一次连接,后面就不会断开,直到测试完成,
                   # 注:若是 1 则代表每次请求完成则断开连接,下次请求再重新连接
                   # 
--csv              #以CSV格式输出,方便我们统计Excel等处理
--user   #用于发送ACL样式的“验证用户名密码”。需要 -a。
--dbnum        #选择指定的数据库号进行测试,redis默认数据库为(0~16) (default 0)
--threads     #启动多线程模式来测试
--cluster          #启用集群模式来测试
--enable-tracking  #启动测试之前发送客户端跟踪
--help             #帮助文档
--version          #显示版本号

测试案例

①:连接redis服务器并测试以50个客户端并发(平分每个客户端2000次)访问100000次

./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 

②:不输出测试过程,只显示当前测试案例结束的时间

./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q

④:综合上面,并设置每个请求的请求值的大小字节

./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q -d 5

④:综合上面,并设置指定的测试案例

./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q -d 5 -t SET,SADD,ZADD,GET

随机 set/get 100万条命令,1000 个并发

./redis-benchmark -a 123456 -h 192.168.61.129 -p 6379 -t set,get -r 1000000 -n 1000000 -c 1000

测试输出的格式说明:(以 SET 测试案例说明)

./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 1000000 -t SET 
====== SET ======                                                     
  1000000 requests completed in 18.75 seconds
    -- 1000000 请求用时 18.75 秒
  1000 parallel clients
    -- 每个客户端请求次数1000
  3 bytes payload
    -- 每次测试请求字节大小为 3byte
  keep alive: 1
    -- 保持活力模式 1 一直连接 (0则代表每次请求从新连接)
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
    -- 上面两个主机配置 持久化方式关闭 
  multi-thread: no
    -- 不是多线程测试

Latency by percentile distribution:
0.000%