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