1、緩存穿透
? ? 用戶用不存在的key發(fā)起請求,如id=-1,或者過大的id,會(huì)不斷訪問db,量大時(shí)會(huì)導(dǎo)致數(shù)據(jù)庫掛掉。
解決方法:
(1)、增加key值校驗(yàn)。
(2)、緩存設(shè)置,即使數(shù)據(jù)庫中不存在的值也在寫入到緩存中,如(-1,null)等,可以設(shè)置有效時(shí)間短些,防止單id反復(fù)攻擊。
2、緩存擊穿
? ? 緩存中存在的key,在失效的時(shí)候,大量對此數(shù)據(jù)的請求去訪問數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫的壓力瞬間提升。
解決方法:
(1)、設(shè)置熱點(diǎn)數(shù)據(jù)永不過期
(2)、加互斥鎖
3、緩存雪崩
? ? 相對于擊穿,大量的key同時(shí)失效,導(dǎo)致大量請求同時(shí)訪問db,引起db壓力驟增,導(dǎo)致雪崩。
解決方法:
(1)、熱點(diǎn)數(shù)據(jù)永不過期
(2)、可以失效時(shí)間分布設(shè)置,防止同一時(shí)間大量key同時(shí)失效。