作者:蔡舒
身为码农,缓存大概是我们接触最频繁的概念之一了。 当读写性能不达标,我们也许会脱口:做缓存策略吧,性能会大幅提升的; 当发现缓存命中率不足时,我们也许会脱口而出:提升命中率吧,性能会大幅提升的; 但事实确实如此吗?会不会其他方法会工作的更好?下面是我的一些数据分析,希望能给大家带来一些灵感与思考。
命中率 = 缓存命中次数/请求总数 时延 = 命中率×缓存时延 (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%,仅仅一个百分点,性能提升就达到了近一倍!
上面的分析,说明了缓存命中率和性能并不是一个线性关系。缓存与性能的关系曲线如下图所示。当缓存层级间速度差异越大,此曲线越陡峭。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。