redis-benchmark使用参数介绍

Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 (类似于 Apache ab 程序)。你可以使用 redis-benchmark -h 来查看基准参数。

redis 性能测试工具可选参数如下所示:

序号

选项

描述

默认值

1

-h

指定服务器主机名

127.0.0.1

2

-p

指定服务器端口

6379

3

-s

指定服务器 socket

4

-c

指定并发连接数

50

5

-n

指定请求数

10000

6

-d

以字节的形式指定 SET/GET 值的数据大小

2

7

-k

1=keep alive 0=reconnect

1

8

-r

SET/GET/INCR 使用随机 key, SADD 使用随机值

9

-P

通过管道传输 <numreq> 请求

1

10

-q

强制退出 redis。仅显示 query/sec 值

11

--csv

以 CSV 格式输出

12

-l(L 的小写字母)

生成循环,永久执行测试

13

-t

仅运行以逗号分隔的测试命令列表。

14

-I(i 的大写字母)

Idle 模式。仅打开 N 个 idle 连接并等待。

压测示例

压测需要一段时间,因为它需要依次压测多个命令的结果,如:get、set、incr、lpush等等,所以我们需要耐心等待,如果只需要压测某个命令,如:set,那么可以在以上的命令后加一个参数-t:

示例1:

redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 50 -t set


====== SET ======
   100000 requests completed in 0.40 seconds           ## 0.4秒处理了100000个请求
   50 parallel clients                                 ## 50个并发
   3 bytes payload                                     ## 每次存取3 byte
   keep alive: 1
   host configuration "save": 3600 1 300 100 60 10000
   host configuration "appendonly": no
   multi-thread: no
 
 22.96% <= 0.1 milliseconds
 99.96% <= 0.2 milliseconds
 100.00% <= 0.2 milliseconds
 253164.55 requests per second


这样看起来数据很多,如果我们只想看最终的结果,可以带上参数-q,完整的命令如下:

示例2:

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


PING_INLINE: 218818.39 requests per second
 PING_BULK: 250000.00 requests per second
 SET: 251256.28 requests per second
 GET: 250626.58 requests per second
 INCR: 250626.58 requests per second
 LPUSH: 252525.25 requests per second
 RPUSH: 252525.25 requests per second
 LPOP: 251889.16 requests per second
 RPOP: 251889.16 requests per second
 SADD: 253164.55 requests per second
 HSET: 255754.47 requests per second
 SPOP: 252525.25 requests per second
 ZADD: 256410.27 requests per second
 ZPOPMIN: 253164.55 requests per second
 LPUSH (needed to benchmark LRANGE): 255102.05 requests per second
 LRANGE_100 (first 100 elements): 102354.15 requests per second
 LRANGE_300 (first 300 elements): 38431.98 requests per second
 LRANGE_500 (first 450 elements): 26983.27 requests per second
 LRANGE_600 (first 600 elements): 20721.09 requests per second
 MSET (10 keys): 210970.47 requests per second


使用 pipelining

默认情况下,每个客户端都是在一个请求完成之后才发送下一个请求 (benchmark 会模拟 50 个客户端除非使用 -c 指定特别的数量), 这意味着服务器几乎是按顺序读取每个客户端的命令。Also RTT is payed as well.

真实世界会更复杂,Redis 支持 /topics/pipelining,使得可以一次性执行多条命令成为可能。 Redis pipelining 可以提高服务器的 TPS。

示例3:

redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 50 -t set,get -P 16 -q


 SET: 625400.00 requests per second  GET: 1318315.88 requests per second