緩存擊穿和緩存穿透的區(qū)別:緩存擊穿:當(dāng)大量并發(fā)請(qǐng)求訪問(wèn)未緩存的 key 時(shí)發(fā)生,導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大。緩存穿透:當(dāng)惡意請(qǐng)求或爬蟲(chóng)頻繁訪問(wèn)從未被緩存過(guò)的 key 時(shí)發(fā)生,導(dǎo)致不必要的數(shù)據(jù)庫(kù)訪問(wèn)。
Redis緩存擊穿與緩存穿透的區(qū)別
問(wèn)題:緩存擊穿和緩存穿透的區(qū)別是什么?
回答:
緩存擊穿和緩存穿透是兩個(gè)不同的緩存問(wèn)題:
緩存擊穿
描述:當(dāng)緩存中不存在某個(gè)特定 key,并且在短時(shí)間內(nèi)有大量并發(fā)請(qǐng)求同時(shí)訪問(wèn)該 key 時(shí),就會(huì)發(fā)生緩存擊穿。
原因:由于緩存中沒(méi)有該 key,導(dǎo)致所有請(qǐng)求都直接訪問(wèn)數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大,甚至崩潰。
解決方法:使用加鎖機(jī)制或其他手段,避免并發(fā)請(qǐng)求同時(shí)訪問(wèn)未緩存的 key,并對(duì)未命中緩存的情況進(jìn)行處理。
緩存穿透
描述:當(dāng)某些 key 從未被緩存過(guò),并且通過(guò)惡意請(qǐng)求或爬蟲(chóng)頻繁訪問(wèn)時(shí),就會(huì)發(fā)生緩存穿透。
原因:緩存中不存在該 key,所有請(qǐng)求都會(huì)直接訪問(wèn)數(shù)據(jù)庫(kù),即使該 key 不存在也一樣。
解決方法:對(duì)所有請(qǐng)求進(jìn)行有效性檢查,對(duì)于不存在的 key,直接返回錯(cuò)誤或空值,避免不必要的數(shù)據(jù)庫(kù)訪問(wèn)。