參考文件 阿里面試redis最常問的三個問題:快取雪崩、擊穿、穿透(帶答案)
參考文件 redis快取雪崩、快取穿透、熱點key解決方案和分析
第一,大多數系統設計者考慮用加鎖或者佇列的方式保證來保證不會有大量的執行緒對資料庫一次性進行讀寫,避免快取失效時對資料庫造成太大的壓力,雖然能夠在一定的程度上緩解了資料庫的壓力但是與此同時又降低了系統的吞吐量。
第二,分析使用者的行為,盡量讓快取失效的時間均勻分布。
1.使用互斥鎖(mutex key):這種解決方案思路比較簡單,就是只讓乙個執行緒構建快取,其他執行緒等待構建快取的執行緒執行完,重新從快取獲取資料就可以了
2. "提前"使用互斥鎖(mutex key):在value內部設定1個超時值(timeout1), timeout1比實際的memcache timeout(timeout2)小。當從cache讀取到timeout1發現它已經過期時候,馬上延長timeout1並重新設定到cache。然後再從資料庫載入資料並設定到cache中。
3. 「永遠不過期」:
這裡的「永遠不過期」包含兩層意思:
(1) 從redis上看,確實沒有設定過期時間,這就保證了,不會出現熱點key過期問題,也就是「物理」不過期。
(2) 從功能上看,如果不過期,那不就成靜態的了嗎?所以我們把過期時間存在key對應的value裡,如果發現要過期了,通過乙個後台的非同步執行緒進行快取的構建,也就是「邏輯」過期.
1.增加引數校驗
2.給不存在資料設定null值或者提示,設定過期時間
3.使用布隆過濾器
redis 快取擊穿 穿透 雪崩
一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。如何避免?1 對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一...
Redis快取雪崩 擊穿 穿透
目錄 三 快取擊穿 四 快取穿透 這三個問題一旦發生,就會導致大量請求進入後台的資料庫,如果有大量併發同時到達資料庫,有可能會導致資料庫宕機,影響業務,也有可能會導致一系列連鎖反映,很可能導致業務長時間無法恢復。接下來本文詳細介紹這三個問題的發生場景以及對應的解決方案。雪崩是指大量請求無法在redi...
快取雪崩 擊穿 穿透
1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...