Redis性能测试

官方已经为我们准备好性能测试工具 redis-benchmark ,它可以测试我们redis各个类型及场景下的读写性能

1、基本属性说明

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests>] [-k <boolean>]

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

2:性能测试默认方式

如果未指定 -t xxx,xxx,... 则从头至尾20个性能测试方案依次进行
(1) PING_INLINE 
(2) PING_MBULK 
(3) SET:将字符串值value关联到key; 
(4) GET:返回key所关联的字符串值,如果key存储的值不是字符串类型,返回一个错误; 
(5) INCR:将key中存储的数字值增一。不能转换为数字则报错; 
(6) LPUSH:将一个或多个值value插入到列表key的表头; 
(7) RPUSH:将一个或多个值value插入到列表key的表尾; 
(8) LPOP:移除并返回列表key的头元素; 
(9) RPOP:移除并返回列表key的尾元素; 
(10) SADD:将一个或多个member元素加入到集合set当中,已经存在于集合的member元素将被忽略; 
(11) HSET:将字符串值value关联到hash里的key中
(12) SPOP:移除并返回集合中的一个随机元素; 
(13) ZADD:测试sortedSet有序集合的添加时间性能
(14) ZPOPMIN:测试sortedSet有序集合,删除多个值并把删除的值排序,从小到大
(15) LPUSH:将一个或多个value插入到列表key的表头; 
(16) LRANGE_100:返回列表key中指定区间内的元素,前100条元素; 
(17) LRANGE_300:返回列表key中指定区间内的元素,前300条元素; 
(18) LRANGE_500:返回列表key中指定区间内的元素,前500条元素; 
(19) LRANGE_600:返回列表key中指定区间内的元素,前600条元素; 
(20) MSET:同时设置一个或多个key-value对,value为字符串。

如果未指定 -r 则以下面的四个键来测试
redis-benchmark性能测试默认情况下只会以如下类型key来测试(低版本应该是三个)
1) "myhash"
    此类型为“hash”,每次请求则会向“hash”key为 “element:__rand_int__” 添加“VXK”,后者覆盖前者
2) "counter:__rand_int__"
    此类型为“string”,每次请求则会累加 1 ,后个请求会对前一个值+1操作
3) "key:__rand_int__"
    此类型为“string”,每次请求则会存放“VXK”,后个请求覆盖上一个值
4) "mylist"
    此类型为“list”,往集合内部存储“VXK”,每请求一次则插入一次

3:常用测试方案及说明

①:连接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.751000 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% <= 6.159 milliseconds (cumulative count 1) 50.000% <= 13.191 milliseconds (cumulative count 500348) 75.000% <= 15.687 milliseconds (cumulative count 750168) 98.438% <= 26.799 milliseconds (cumulative count 984415) 100.000% <= 49.151 milliseconds (cumulative count 1000000) 100.000% <= 49.151 milliseconds (cumulative count 1000000) Cumulative distribution of latencies: 0.000% <= 0.103 milliseconds (cumulative count 0) 1.234% <= 7.103 milliseconds (cumulative count 12338) 12.473% <= 9.103 milliseconds (cumulative count 124733) 49.156% <= 13.103 milliseconds (cumulative count 491559) 100.000% <= 48.127 milliseconds (cumulative count 999999) 100.000% <= 50.111 milliseconds (cumulative count 1000000) Summary: throughput summary: 53339.02 requests per second -- 吞吐量摘要:每秒53339.02个请求 latency summary (msec): --延迟摘要(毫秒) avg min p50 p95 p99 max 13.639 6.152 13.191 21.663 28.351 49.151

4:其它参数介绍

①:-P <numreq> 
  在上面的性能测试中,每个客户端都是在一个请求完成之后才发送下一个请求,如指定-c 50 -n 10000
则服务器几乎是按照顺序依次读取每个客户端的请求
  Redis 支持 /topics/pipelining;就是说Redis可以一次性执行多条命令(把命令打包一次性发送服务器)
所以Redis pipelining 可以提高服务器的 TPS。
  总结:减少网络的请求,把请求汇总处理
./redis-benchmark -c 20 -n 1000000 -t set,get -P 16 -q

 

posted on 2022-12-07 11:08  uestc2007  阅读(662)  评论(0编辑  收藏  举报

导航