Redis緩存雪崩與緩存穿透

一、什麼是緩存雪崩?redis

  好比:Redis不可能把全部的數據都緩存起來,全部redis須要對數據設置過時時間,而且採用惰性刪除與定時刪除兩種策略對過時鍵刪除。若是緩存數據設置的過時時間都是相同的,而且redis剛好將這部分的數據都刪除了,這就形成了緩存所有失效,全部的請求都跑到數據庫中。數據庫

總而言之:就是咱們的緩存數據庫(Redis)掛掉了,所有的請求都跑到數據庫中。緩存

二、如何解決緩存雪崩?對象

  在給緩存設置一個隨機的過時時間,這樣能夠減小緩存在同一個時間點過時。高可用

  當redis掛掉了,能夠分爲三個點解決:請求

  1)在事發前,實現redis的高可用,儘可能避免redis掛掉的狀況發生數據

  2)在事發時,能夠設置本地緩存與限流機制,盡最大的可能防止數據庫GG查詢

  3)在事發後,redis持久化,重啓後自動從磁盤加載數據,快速的恢復到災難前狀態。di

 

三、什麼是緩存穿透?時間

  緩存穿透指的是查詢一個必定不存在的數據。由於處於容錯性考慮,當緩存中沒有這個數據時,則就會從數據庫中找,若是數據庫中找不到也就不會保存到緩存中。這就形成了這個不存在的數據每次請求都鏈接數據庫,到數據庫中找,失去了緩存的意義。

總而言之:就是請求的數據在緩存中大量不命中,致使請求都走數據庫。

四、如何解決緩存穿透?

  兩種方案:

1)若是請求的數據時不合法的,不存在的,則可使用布隆過濾器(BloomFilter)提早攔截,不合法的就不讓這個請求到數據庫層。

2)當請求的數據找不到的時候,能夠將這個空的對象保存到緩存中(通常設置一個較短的過時時間),當再次請求的時候能夠從緩存裏邊拿到了。

 

五、什麼是緩存與數據庫雙寫一致?

  當咱們須要更新數據的時候,不少狀況都會形成數據庫和緩存中的數據不一致。從理論上來講,只要設置了過時時間,就能保證緩存和數據庫中的數據最終是一致的。只要緩存數據過時了,就會被刪除,隨後讀的時候,就會查找數據庫的數據,將數據讀取寫入到緩存中。

相關文章
相關標籤/搜索