阿里妹導(dǎo)讀:響應(yīng)時(shí)間長(zhǎng),遇到性能瓶頸時(shí),開(kāi)發(fā)者第一個(gè)想到的總是性能優(yōu)化。《什么技能產(chǎn)品經(jīng)理不會(huì)提,但技術(shù)人必須懂?》講到了什么時(shí)候需要使用緩存。但緩存的用法是什么?一旦緩存使用不當(dāng),或稍有不注意,反而會(huì)翻車(chē),導(dǎo)致系統(tǒng)投入更多的維護(hù)成本,陡增更高的復(fù)雜度。今天,科懷就來(lái)講講緩存的正確使用姿勢(shì)。
Least-Recently-Used(LRU)
Least-Frequently-Used(LFU)
SIZE
First in First Out(FIFO)
方案一:采用bloom filter保存緩存過(guò)的key,在訪問(wèn)請(qǐng)求到來(lái)時(shí)可以過(guò)濾掉不存在的key,防止這些請(qǐng)求到db層;
方案二:如果db查詢(xún)不到數(shù)據(jù),保存空對(duì)象到緩存層,設(shè)置較短的失效時(shí)間;
方案三:針對(duì)業(yè)務(wù)場(chǎng)景對(duì)請(qǐng)求的參數(shù)進(jìn)行有效性校驗(yàn),防止非法請(qǐng)求擊垮db。
方案一:使用互斥鎖,當(dāng)緩存數(shù)據(jù)失效時(shí),保證一個(gè)請(qǐng)求能夠訪問(wèn)到數(shù)據(jù)庫(kù),并更新緩存,其他線程等待并重試;
方案二:緩存數(shù)據(jù)“永遠(yuǎn)不過(guò)期”,如果緩存數(shù)據(jù)不設(shè)置失效時(shí)間的話,就不會(huì)存在熱點(diǎn)key過(guò)期造成了大量請(qǐng)求到數(shù)據(jù)庫(kù)。但是,緩存數(shù)據(jù)就變成“靜態(tài)數(shù)據(jù)”,因此當(dāng)緩存數(shù)據(jù)快要過(guò)期時(shí),采用異步線程的方式提前進(jìn)行更新緩存數(shù)據(jù)。
方案一:使用互斥鎖的方式,保證只有單個(gè)線程進(jìn)行請(qǐng)求能夠達(dá)到db;
方案二:多每個(gè)key的失效時(shí)間在基礎(chǔ)時(shí)間上再加上一個(gè)1~5分鐘的隨機(jī)值,這樣就能保證大規(guī)模key集體失效的概率,并且需要盡量讓多個(gè)key的失效時(shí)間能夠均勻分布;
cache.delKey(key);
db.update(data);
Thread.sleep(xxx);
cache.delKey(key);
《深入分布式緩存》
https://book.douban.com/subject/27602483/?spm=ata.13261165.0.0.1fbe62a58KTCCF
緩存穿透、緩存擊穿以及緩存雪崩問(wèn)題探討:
1.https://www.cnblogs.com/Leo_wl/p/9062029.html?spm=ata.13261165.0.0.1fbe62a58KTCCF
2.https://blog.csdn.net/zeb_perfect/article/details/54135506?spm=ata.13261165.0.0.1fbe62a58KTCCF
3.https://www.cnblogs.com/Leo_wl/p/9062029.html?spm=ata.13261165.0.0.1fbe62a58KTCCF#_label0_0
緩存更新策略:
1.https://www.jianshu.com/p/8950c52ce53b?spm=ata.13261165.0.0.3d1462a5BuyJzs
2.https://www.jianshu.com/p/22c7e9ab5d15?spm=ata.13261165.0.0.3d1462a5BuyJzs
3.https://www.cnblogs.com/rjzheng/p/9041659.html?spm=ata.13261165.0.0.3d1462a5BuyJzs
4.https://www.jianshu.com/p/8950c52ce53b?spm=ata.13261165.0.0.3d1462a5BuyJzs
數(shù)據(jù)最終一致性:
1.https://blog.kido.site/2018/11/24/db-and-cache-preface/?spm=ata.13261165.0.0.3d1462a5BuyJzs
2.https://msd.misuland.com/pd/3255817997595443436?spm=ata.13261165.0.0.3d1462a5BuyJzs
3.https://blog.51cto.com/14214194/2411931?spm=ata.13261165.0.0.3d1462a5BuyJzs
4.https://www.cnblogs.com/pomer-huang/p/8998623.html?spm=ata.13261165.0.0.3d1462a5BuyJzs
緩存設(shè)計(jì):
1.https://blog.csdn.net/zjttlance/article/details/80234341?spm=ata.13261165.0.0.3d1462a5BuyJzs
2.https://stor.51cto.com/art/201908/600603.htm?spm=ata.13261165.0.0.3d1462a5BuyJzs
3.https://yq.aliyun.com/articles/652472?spm=ata.13261165.0.0.3d1462a5BuyJzs&utm_content=m_1000018600
4.https://blog.csdn.net/ruanchengmin/article/details/79210632?spm=ata.13261165.0.0.3d1462a5BuyJzs
緩存替換策略:
https://blog.csdn.net/zhushuai1221/article/details/95167884?spm=ata.13261165.0.0.67d762a5IOUTl2
聯(lián)系客服