在面試中被問到了redis雪崩和穿透,就給大家說說redis雪崩和穿透。
-
什麼是雪崩
通俗的講就是:每個key(數據) 如果設置了失效時間的話,如果大量key同時過期的時候,這些key又大量地去請求這些key時,因爲redis裏面沒有這些數據,就會大量的請求就會大量湧向數據庫,就會導致數據庫處理不過來,導致“雪崩”。
-
解決辦法
在設置失效時間的時候,給它加一個隨機的秒數(0~60),來讓這些大量的數據進行錯開對數據庫的訪問。這樣數據庫就能應付過來了。如果這個key的訪問頻率頻繁的時候,我們可以讓它每查一次就給它加點有效時間。這樣就能解決雪崩問題了
-
什麼是穿透
正常的執行路徑是:請求數據,首先會從redis緩存中拿數據,如果緩存沒有的話纔去查數據庫,再寫到redis緩存中。那麼如果有人請求一條根本不存在的數據時,redis裏面肯定沒有嘛,它就會去訪問數據庫,但是數據庫沒有,所以它也沒把數據寫回redis緩存。所以它每次請求這個數據的時候它就會直接去訪問數據庫。如果請求的數量太大的話,都直接穿過redis直接去訪問數據庫,數據庫承受不了這個訪問數量。
-
解決辦法: