为数据库添加外部缓存后的性能提升分析

数据库 指持久化数据库,如

  • mysql
  • mongodb
缓存 指内存型的数据存储,如
  • redis
  • memcached
一个良好的缓存策略需兼顾
  • 命中率
  • 缓存数据与数据库数据的一致性
对命中率的兼顾 多大的命中率是好的?
用数学知识来分析这个问题,先设定几个关键的参数
  • T(c):读一次缓存所需时间
  • T(d):读一次数据库所需时间
  • G:缓存命中率
一次数据读取所需的时间的期望值为:
T(c)*G + (T(c)+T(d))*(1-G)

增加数据库缓存的目标为提高数据读取速度,可以归结为一个表达式
T(c)*G + (1-G)*(T(c)+T(d)) < T(d)

等同于
T(c) - T(d)*G < 0

读取速度提升的比值为
(T(d)*G - T(c))/T(d)

假如,T(d)=50ms,T(c)=10ms,G=0.6,读取速度提升比值为
(50*0.6 - 10)/50 = 0.4

化为百分比也就是40%。
假如,T(d)=50ms,T(c)=10ms,G的值必须大于
G = T(c)/T(d) = 0.2

才能期望读取速度得到提升。
可以看出
【为数据库添加外部缓存后的性能提升分析】加入缓存不一定能够提升读取性能,这取决于缓存读取速度、数据库读取速度以及缓存的命中率。

    推荐阅读