概述
对redis做一个基准的压测,测一下redis的性能和QPS(query per second)。
redis提供的redis-benchmark压测工具,是最快捷最方便的。这个工具也比较简单,实现一些简单的操作和场景去压测。
对redis单实例架构进行压测
root@VM-0-10-ubuntu:~/redis/redis-4.0.9/src# ./redis-benchmark
====== PING_INLINE ======
100000 requests completed in 1.00 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.94% <= 1 milliseconds
100.00% <= 1 milliseconds
99900.09 requests per second
====== PING_BULK ======
100000 requests completed in 1.01 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.90% <= 1 milliseconds
100.00% <= 1 milliseconds
98522.17 requests per second
====== SET ======
100000 requests completed in 0.81 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.74% <= 1 milliseconds
99.90% <= 4 milliseconds
99.95% <= 5 milliseconds
100.00% <= 5 milliseconds
122699.39 requests per second
====== GET ======
100000 requests completed in 0.84 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
119617.22 requests per second
====== INCR ======
100000 requests completed in 0.96 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.95% <= 2 milliseconds
99.96% <= 3 milliseconds
100.00% <= 3 milliseconds
104384.13 requests per second
====== LPUSH ======
100000 requests completed in 0.95 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.93% <= 1 milliseconds
99.95% <= 2 milliseconds
100.00% <= 2 milliseconds
105263.16 requests per second
====== RPUSH ======
100000 requests completed in 0.96 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.89% <= 1 milliseconds
99.95% <= 4 milliseconds
100.00% <= 4 milliseconds
104493.20 requests per second
====== LPOP ======
100000 requests completed in 0.95 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
105374.08 requests per second
====== RPOP ======
100000 requests completed in 0.94 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
105932.20 requests per second
====== SADD ======
100000 requests completed in 1.00 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.85% <= 1 milliseconds
99.96% <= 2 milliseconds
99.97% <= 4 milliseconds
100.00% <= 4 milliseconds
99700.90 requests per second
====== HSET ======
100000 requests completed in 0.92 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.90% <= 1 milliseconds
99.98% <= 2 milliseconds
100.00% <= 2 milliseconds
108577.63 requests per second
====== SPOP ======
100000 requests completed in 0.82 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
121212.12 requests per second
====== LPUSH (needed to benchmark LRANGE) ======
100000 requests completed in 0.79 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.93% <= 1 milliseconds
100.00% <= 1 milliseconds
126262.62 requests per second
====== LRANGE_100 (first 100 elements) ======
100000 requests completed in 2.47 seconds
50 parallel clients
3 bytes payload
keep alive: 1
90.89% <= 1 milliseconds
99.87% <= 2 milliseconds
99.90% <= 4 milliseconds
99.95% <= 5 milliseconds
99.95% <= 6 milliseconds
100.00% <= 6 milliseconds
40551.50 requests per second
====== LRANGE_300 (first 300 elements) ======
100000 requests completed in 6.24 seconds
50 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
99.40% <= 2 milliseconds
99.93% <= 3 milliseconds
99.96% <= 5 milliseconds
100.00% <= 5 milliseconds
16017.94 requests per second
====== LRANGE_500 (first 450 elements) ======
100000 requests completed in 8.64 seconds
50 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
7.57% <= 2 milliseconds
99.56% <= 3 milliseconds
99.81% <= 4 milliseconds
99.83% <= 5 milliseconds
99.85% <= 6 milliseconds
99.98% <= 9 milliseconds
100.00% <= 9 milliseconds
11568.72 requests per second
====== LRANGE_600 (first 600 elements) ======
100000 requests completed in 10.73 seconds
50 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 2 milliseconds
89.55% <= 3 milliseconds
99.35% <= 4 milliseconds
99.86% <= 5 milliseconds
99.90% <= 6 milliseconds
99.91% <= 7 milliseconds
99.99% <= 8 milliseconds
100.00% <= 8 milliseconds
9321.40 requests per second
====== MSET (10 keys) ======
100000 requests completed in 1.82 seconds
50 parallel clients
3 bytes payload
keep alive: 1
89.98% <= 1 milliseconds
99.75% <= 2 milliseconds
99.90% <= 3 milliseconds
99.95% <= 5 milliseconds
100.00% <= 5 milliseconds
54975.26 requests per second
对redis读写分离架构进行压测
单实例写QPS+单实例读QPS
[root@master src]# ./redis-benchmark -h 172.30.0.11
====== PING_INLINE ======
100000 requests completed in 0.89 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.98% <= 1 milliseconds
100.00% <= 1 milliseconds
112107.62 requests per second
====== PING_BULK ======
100000 requests completed in 1.13 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.76% <= 1 milliseconds
99.95% <= 2 milliseconds
100.00% <= 2 milliseconds
88652.48 requests per second
====== SET ======
100000 requests completed in 1.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.60% <= 1 milliseconds
99.76% <= 2 milliseconds
99.82% <= 3 milliseconds
99.99% <= 4 milliseconds
100.00% <= 4 milliseconds
89928.05 requests per second
====== GET ======
100000 requests completed in 1.14 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.96% <= 1 milliseconds
99.97% <= 5 milliseconds
99.97% <= 9 milliseconds
99.97% <= 10 milliseconds
100.00% <= 10 milliseconds
87719.30 requests per second
====== INCR ======
100000 requests completed in 1.16 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.87% <= 1 milliseconds
100.00% <= 1 milliseconds
86430.43 requests per second
====== LPUSH ======
100000 requests completed in 1.04 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
96339.12 requests per second
====== RPUSH ======
100000 requests completed in 1.04 seconds
50 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
95785.44 requests per second
====== LPOP ======
100000 requests completed in 0.97 seconds
50 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 1 milliseconds
100.00% <= 1 milliseconds
103305.79 requests per second
====== RPOP ======
100000 requests completed in 0.92 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.89% <= 1 milliseconds
99.93% <= 2 milliseconds
100.00% <= 3 milliseconds
100.00% <= 3 milliseconds
108813.92 requests per second
====== SADD ======
100000 requests completed in 1.14 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.82% <= 1 milliseconds
100.00% <= 2 milliseconds
88028.16 requests per second
====== HSET ======
100000 requests completed in 1.09 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.98% <= 1 milliseconds
100.00% <= 1 milliseconds
92165.90 requests per second
====== SPOP ======
100000 requests completed in 1.22 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.89% <= 1 milliseconds
99.95% <= 2 milliseconds
100.00% <= 2 milliseconds
82236.84 requests per second
====== LPUSH (needed to benchmark LRANGE) ======
100000 requests completed in 1.09 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.68% <= 1 milliseconds
99.87% <= 2 milliseconds
99.88% <= 3 milliseconds
100.00% <= 3 milliseconds
91575.09 requests per second
====== LRANGE_100 (first 100 elements) ======
100000 requests completed in 0.92 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.97% <= 1 milliseconds
100.00% <= 1 milliseconds
108342.37 requests per second
====== LRANGE_300 (first 300 elements) ======
100000 requests completed in 0.95 seconds
50 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
105596.62 requests per second
====== LRANGE_500 (first 450 elements) ======
100000 requests completed in 1.13 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.94% <= 1 milliseconds
100.00% <= 1 milliseconds
88105.73 requests per second
====== LRANGE_600 (first 600 elements) ======
100000 requests completed in 1.13 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.63% <= 1 milliseconds
99.75% <= 2 milliseconds
99.77% <= 3 milliseconds
100.00% <= 3 milliseconds
88731.15 requests per second
====== MSET (10 keys) ======
100000 requests completed in 0.98 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.92% <= 1 milliseconds
100.00% <= 1 milliseconds
102145.05 requests per second
测试结果总结
- 根据上述性能测试结果发现:
- 大部分情况下得看服务器的性能和配置,机器越牛逼并且配置越高,redis高并发单机就可以上十几万以上;
- 一般性的配置,redis提供的高并发,至少到上万是没问题的;
- 大量网络请求的调用,因为网络本身就有开销,所以redis的吞吐量就不一定那么高了。这点可以从单点和读写分离架构可以看出来。
- 水平扩容redis读节点,提升度吞吐量
根据主从读写架构分离原则,在其他服务器上另外加redis从节点,单个从节点读请求QPS一般在5万左右,两个redis从节点可以承载整个集群读请求QPS可以在10万以上。