前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >缓存与性能的一些思考

缓存与性能的一些思考

原创
作者头像
serena
修改2021-08-03 14:56:05
9580
修改2021-08-03 14:56:05
举报
文章被收录于专栏:社区的朋友们社区的朋友们

作者:蔡舒

导语

身为码农,缓存大概是我们接触最频繁的概念之一了。 当读写性能不达标,我们也许会脱口:做缓存策略吧,性能会大幅提升的; 当发现缓存命中率不足时,我们也许会脱口而出:提升命中率吧,性能会大幅提升的; 但事实确实如此吗?会不会其他方法会工作的更好?下面是我的一些数据分析,希望能给大家带来一些灵感与思考。

公式

命中率 = 缓存命中次数/请求总数 时延 = 命中率×缓存时延 (1-命中率)×(缓存时延 失效时延) QPS = 线程数/时延

一个例子

假设我们运行了一个单线程的数据服务,单请求的延迟为 100ms,qps 为 10;做了缓存策略之后,命中缓存的情况下,单请求的延迟为 0.1ms,qps 为 10000。我们用服务的平均 qps 来代表其性能,下表为性能和缓存命中率的关系:

缓存命中率

性能(QPS

0%

9.99

20%

12

50%

19

70%

33

90%

99

92%

123

95%

196

96%

243

97%

322

98%

476

99%

909

100%

1000

从表格中,可以发现一些有趣的现象:当我们把缓存命中率从 20%提升到 50%,带来的性能提升还不到 60%。而当命中率从 98%提升到 99%,仅仅一个百分点,性能提升就达到了近一倍!

缓存与性能的关系

上面的分析,说明了缓存命中率和性能并不是一个线性关系。缓存与性能的关系曲线如下图所示。当缓存层级间速度差异越大,此曲线越陡峭。

指导意义

  • 只有当缓存命中率达到 80%以上,才会有明显的性能提升。命中率为 80%,性能提升约 3~5 倍;命中率为 90%,性能提升约 5~10 倍;
  • 缓存命中率与业务场景有关,局部性越强,缓存性能提升越大。对于完全随机的业务,缓存策略提升不大,甚至拖累性能;
  • 对于特定业务,如果缓存命中率达到 80%甚至 90%以上,优化缓存命中率可以得到巨大的性能提升;
  • 对于特定业务,如果缓存命中率不到 70%,优化未命中缓存时的业务性能更靠谱。比如换 SSD,优化算法等;
  • 高性能存储系统,比如数据库服务,一定要预留大量可用系统内存以供页缓存使用。一旦内存不够,则性能将会大大折扣。比如系统内存不足,导致页缓存命中率从 99%跌到 95%,性能会下降五倍之多;
  • SSD 是个好东西。对于纯随机的读写服务,SSD 比缓存要靠谱得多;
  • 对于局部性不太强的业务,二级缓存、三级缓存也是有用的,如果一级缓存命中率不高,多加几层缓存也可使得每一层缓存间的命中率达到 90%以上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 公式
  • 一个例子
  • 缓存与性能的关系
  • 指导意义
相关产品与服务
数据库专家服务
数据库专家服务(Database Expert Service,DBexpert)为您提供专业化的数据库服务。仅需提交您的具体问题和需求,即可获得腾讯云数据库专家的专业支持,助您解决各类专业化问题。腾讯云数据库专家服务团队均有10年以上的 DBA 经验,拥有亿级用户产品的数据库管理经验,以及丰富的服务经验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档