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

1.緩存雪崩

(1)什麼是緩存雪崩

緩存雪崩指的是在同一時刻,緩存大量失效,致使大量的請求直接到了數據庫,數據庫壓力劇增,引發系統崩潰。可能出現的狀況有:
①大量的key設置了相同的過時時間,致使在緩存在同一時刻所有失效,形成瞬時DB請求量大、壓力驟增,引發雪崩。
②緩存系統出現故障,形成緩存系統沒法提供服務,形成瞬時DB請求量大、壓力驟增,引發雪崩。redis

(2)怎麼避免緩存雪崩

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

2.緩存穿透

(1)什麼是緩存穿透

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

(2)怎麼避免緩存穿透

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

3.緩存擊穿

(1)什麼是緩存擊穿

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

(2)怎麼避免緩存擊穿

在訪問key以前,採用SETNX(set if not exists)來設置另外一個短時間key來鎖住當前key的訪問,訪問結束再刪除該短時間key。class

相關文章
相關標籤/搜索