定義:
1贰健、緩存穿透:查詢不存在緩存及不存在于數(shù)據(jù)庫的數(shù)據(jù);如果一直查詢,每次都會從數(shù)據(jù)庫中查詢且因為沒有數(shù)據(jù)刃唤,所以也不會反填到緩存中唤锉;那么查詢這種數(shù)據(jù)就失去了緩存的意義竖哩,并且會給數(shù)據(jù)庫帶來壓力赂毯。這就是緩存穿透糖赔∑钾ぃ可能是黑客攻擊或者惡意攻擊造成的。
2放典、緩存擊穿:redis中某個key過期了逝变,而正好一個時間點這個key正好被大量訪問,就會造成緩存擊穿奋构。
3壳影、緩存雪崩:在極短時間段內(nèi),大量的key過期弥臼,并且被訪問宴咧,造成直接訪問數(shù)據(jù)庫,從而導(dǎo)致數(shù)據(jù)庫壓力過大径缅,使整個服務(wù)器崩潰掺栅。
解決方案:
緩存穿透:
1)對空值進行緩存,可以設(shè)置比較短的過期時間
2)設(shè)置可以訪問的白名單
3)布隆過濾器:將所有可能存在的數(shù)據(jù)哈希到一個足夠大的bitmaps中去纳猪,一個一定不存在的數(shù)據(jù)會被這個bitmaps攔截掉氧卧,從而避免了對底層數(shù)據(jù)的查詢壓力。
4)對redis進行實時監(jiān)控氏堤。
緩存擊穿:
1)預(yù)先設(shè)置熱門數(shù)據(jù)key沙绝,并且增加過期時長
2)實時監(jiān)控,如果發(fā)現(xiàn)某些key被訪問的比較頻繁鼠锈,就增加過期時間的時長
3)使用鎖:例如使用redis自己的SETNX鎖
緩存雪崩:
1)多級緩存
2)分散過期時間