Redis学习--HGET和MGET测试

性能测试

同一门课程,会拆分为多个小班进行授课,每个小班会对于一个评分,课程负责人需要获取所有小班的评分并进行排名。
假设100个课程,每个课程有100个小班,模拟100个并发请求课程所有小班评分数据,每个并发循环30000次。

使用阿里云Redis进行压测,实例规格为2G集群版(2节点)

方案1:将每个课程下每个小班的数据使用单独hash键来存放,按照课程下每个小班循环获取(HGETALL 1 KEY)

峰值QPS: 52.1K/s
峰值CPU: 34.0%
峰值流量: 1.1MB/s
执行耗时:30000*100*100/52100=5758秒

方案2:将每个课程下所有小班的数据使用一个hash键来存放,按照课程批量获取所有小班数据(HGETALL 1 KEY)

峰值QPS: 14.7K/s
峰值CPU: 22.1%
峰值流量: 25MB/s
执行耗时:30000*100/14700=204秒

方案3:将每个小班的评分使用string方式存储,按照课程下每个小班循环获取(GET 1 KEY)

峰值QPS: 52.3k/s
峰值CPU: 33.1%
峰值流量: 2.55MB/s
执行耗时:30000*100*100/52300=5736秒

方案4:将每个小班的评分使用string方式存储,按照课程下所有小班进行批量获取(MGET 100 KEY)

峰值QPS: 34.5k/s
峰值CPU: 66.7%
峰值流量: 61.8MB/s
执行耗时:30000*100/34500=87秒

性能分析

  • 使用HGETALL请求包含1个filed的键和请求包含100个filed的键的CPU消耗比约为1比2.3,但由于请求次数降低100倍,因此性能能提升约43倍。
  • 使用MGET批量请求100个键和使用GET请求1个键的CPU消耗比约为3.1比1,但由于请求次数降低100倍,因此性能约提升约30倍。

PS: 如果针对排名问题,优先推荐使用SORTED SET来处理

posted @ 2021-08-03 11:05  TeyGao  阅读(1036)  评论(0编辑  收藏  举报