基于redis的QPS压测

概述

对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

测试结果总结

  1. 根据上述性能测试结果发现:
  • 大部分情况下得看服务器的性能和配置,机器越牛逼并且配置越高,redis高并发单机就可以上十几万以上;
  • 一般性的配置,redis提供的高并发,至少到上万是没问题的;
  • 大量网络请求的调用,因为网络本身就有开销,所以redis的吞吐量就不一定那么高了。这点可以从单点和读写分离架构可以看出来。
  1. 水平扩容redis读节点,提升度吞吐量
    根据主从读写架构分离原则,在其他服务器上另外加redis从节点,单个从节点读请求QPS一般在5万左右,两个redis从节点可以承载整个集群读请求QPS可以在10万以上。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270