關于redis的幾件小事(七)redis緩存雪崩與穿透

1.緩存雪崩

(1)什么是緩存雪崩

緩存雪崩指的是在同一時刻,緩存大量失效,導致大量的請求直接到了數據庫,數據庫壓力劇增,引起系統(tǒng)崩潰。可能出現的情況有:
①大量的key設置了相同的過期時間,導致在緩存在同一時刻全部失效,造成瞬時DB請求量大、壓力驟增,引起雪崩。
②緩存系統(tǒng)出現故障,造成緩存系統(tǒng)無法提供服務,造成瞬時DB請求量大、壓力驟增,引起雪崩。

(2)怎么避免緩存雪崩

事前
①在設置key的過期時間時,在過期時間上加上一個隨機值,防止大量key同時過期。
②搭建高可用的緩存架構,比如使用 哨兵+主從 結構或者使用 cluster模式,避免緩存系統(tǒng)出現故障。
③可以在系統(tǒng)中使用ehcache做個小緩存,防止redis崩掉之后,還有一部分緩存。
事中
①對系統(tǒng)請求進行降級和限流,防止數據庫之間崩掉。
事后
趕快使用redis持久化的數據,快速恢復緩存數據

2.緩存穿透

(1)什么是緩存穿透

緩存穿透是指有請求訪問到了并不存在的數據,這樣請求就會直接到達數據庫,數據庫就會壓力劇增。

(2)怎么避免緩存穿透

①可以使用一個足夠大的bitmap,將可能存在的key放到里面,請求過來先檢查bitmap里面有么有,如果沒有直接過濾掉這個請求。
②將數據庫查詢出來的空值也放到緩存里面去,是這個key對應一個空值,只是這個key設置的時間比較短。

3.緩存擊穿

(1)什么是緩存擊穿

一個存在的key,在緩存過期的一刻,同時有大量的請求,這些請求都會擊穿到數據庫,造成數據庫請壓力驟增。

(2)怎么避免緩存擊穿

在訪問key之前,采用SETNX(set if not exists)來設置另一個短期key來鎖住當前key的訪問,訪問結束再刪除該短期key。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容