數(shù)據(jù)庫
指持久化數(shù)據(jù)庫搂捧,如
- mysql
- mongodb
緩存
指內(nèi)存型的數(shù)據(jù)存儲,如
- redis
- memcached
一個良好的緩存策略需兼顧
- 命中率
- 緩存數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)的一致性
對命中率的兼顧
多大的命中率是好的骇吭?
用數(shù)學知識來分析這個問題,先設(shè)定幾個關(guān)鍵的參數(shù)
- T(c):讀一次緩存所需時間
- T(d):讀一次數(shù)據(jù)庫所需時間
- G:緩存命中率
一次數(shù)據(jù)讀取所需的時間的期望值為:
T(c)*G + (T(c)+T(d))*(1-G)
增加數(shù)據(jù)庫緩存的目標為提高數(shù)據(jù)讀取速度具伍,可以歸結(jié)為一個表達式
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
才能期望讀取速度得到提升祈坠。
可以看出
加入緩存不一定能夠提升讀取性能,這取決于緩存讀取速度矢劲、數(shù)據(jù)庫讀取速度以及緩存的命中率赦拘。