在面試中被問到了redis雪崩和穿透

在面試中被問到了redis雪崩和穿透,就給大家說說redis雪崩和穿透。

 

  • 什麼是雪崩

   通俗的講就是:每個key(數據) 如果設置了失效時間的話,如果大量key同時過期的時候,這些key又大量地去請求這些key時,因爲redis裏面沒有這些數據,就會大量的請求就會大量湧向數據庫,就會導致數據庫處理不過來,導致“雪崩”。

  • 解決辦法

  在設置失效時間的時候,給它加一個隨機的秒數(0~60),來讓這些大量的數據進行錯開對數據庫的訪問。這樣數據庫就能應付過來了。如果這個key的訪問頻率頻繁的時候,我們可以讓它每查一次就給它加點有效時間。這樣就能解決雪崩問題了

 

  • 什麼是穿透

  正常的執行路徑是:請求數據,首先會從redis緩存中拿數據,如果緩存沒有的話纔去查數據庫,再寫到redis緩存中。那麼如果有人請求一條根本不存在的數據時,redis裏面肯定沒有嘛,它就會去訪問數據庫,但是數據庫沒有,所以它也沒把數據寫回redis緩存。所以它每次請求這個數據的時候它就會直接去訪問數據庫。如果請求的數量太大的話,都直接穿過redis直接去訪問數據庫,數據庫承受不了這個訪問數量。

  • 解決辦法:

  在redis裏面用一個set集來把數據庫查詢的那個查詢主鍵都讀出來存到這個set集裏面。如果有請求時,先查redis裏面的set有沒有這個主鍵,如果沒有就直接返回,不查數據庫。如果有的話查redis,如果沒有的話纔去查數據庫並把數據庫裏的數據寫到緩存中


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章