緩存穿透
場(chǎng)景:用戶查詢數(shù)據(jù)庫(kù)中沒(méi)有的數(shù)據(jù)践磅,這樣不論如何都不會(huì)寫(xiě)入緩存,請(qǐng)求量一大對(duì)數(shù)據(jù)庫(kù)也不是很友好
解決方法:
- 緩存無(wú)效Key
- 布隆過(guò)濾器
緩存雪崩
場(chǎng)景:并發(fā)量很大的情況下赁遗,大量數(shù)據(jù)同時(shí)過(guò)期,在那一瞬間,數(shù)據(jù)庫(kù)壓力暴增
解決方案:
- 在過(guò)期時(shí)間基礎(chǔ)上添加隨機(jī)數(shù)
- 設(shè)置數(shù)據(jù)永不過(guò)期每辟,新開(kāi)一個(gè)線程完成更新
緩存擊穿
場(chǎng)景:某個(gè)訪問(wèn)量極大的數(shù)據(jù),在過(guò)期瞬間干旧,所有訪問(wèn)量打進(jìn)數(shù)據(jù)庫(kù)渠欺,給數(shù)據(jù)庫(kù)造成極大壓力
解決方案:
- 設(shè)置數(shù)據(jù)永不過(guò)期,新開(kāi)一個(gè)線程完成更新
- 對(duì)大量的訪問(wèn)線程進(jìn)行阻塞攔截椎眯,只放一個(gè)線程與數(shù)據(jù)庫(kù)進(jìn)行交互挠将,并寫(xiě)入緩存中
緩存與數(shù)據(jù)庫(kù)一致性問(wèn)題
如何保證緩存與數(shù)據(jù)庫(kù)的一致性?
- 先操作緩存编整,將緩存緩存特殊值舔稀,當(dāng)用戶查到特殊值時(shí)則進(jìn)入休眠,但是對(duì)業(yè)務(wù)有入侵性掌测;
- 延遲雙刪:先刪緩存内贮,再寫(xiě)數(shù)據(jù)庫(kù),再刪緩存
- 先寫(xiě)數(shù)據(jù)庫(kù)再刪緩存
- 邏輯上設(shè)置過(guò)期時(shí)間汞斧,另開(kāi)線程刷新緩存夜郁,刪除邏輯上過(guò)期的key