redis 快取擊穿 穿透 雪崩

2021-09-28 13:24:58 字數 896 閱讀 6208

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢(比如db)。

一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。

如何避免?

1:對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一點,或者該key對應的資料insert了之後清理快取。

2:對一定不存在的key進行過濾。具體請看布隆過濾器

是針對快取中沒有但資料庫有的資料。

場景是,當key失效後,假如瞬間突然湧入大量的請求,來請求同乙個key,這些請求不會命中redis,都會請求到db,導致資料庫壓力過大,甚至扛不住,掛掉。

解決辦法

1、設定熱點key,自動檢測熱點key,將熱點key的過期時間加大或者設定為永不過期,或者設定為邏輯上永不過期

2、加互斥鎖。當發現沒有命中redis,去查資料庫的時候,在執行更新快取的操作上加鎖,當乙個執行緒訪問時,其它執行緒等待,這個執行緒訪問過後,快取中的資料會被重建,這樣其他執行緒就可以從快取中取值。

是指大量key同時失效,對這些key的請求又會打到db上,同樣會導致資料庫壓力過大甚至掛掉。

解決辦法

1)讓key的失效時間分散開,可以在統一的失效時間上再加乙個隨機值,或者使用更高階的演算法分散失效時間。

2)構建多個redis例項,個別節點掛了還有別的可以用。

3)多級快取:比如增加本地快取,減小redis壓力。

4)對儲存層增加限流措施,當請求超出限制,提供降級服務(一般就是返回錯誤即可)

Redis快取雪崩 擊穿 穿透

目錄 三 快取擊穿 四 快取穿透 這三個問題一旦發生,就會導致大量請求進入後台的資料庫,如果有大量併發同時到達資料庫,有可能會導致資料庫宕機,影響業務,也有可能會導致一系列連鎖反映,很可能導致業務長時間無法恢復。接下來本文詳細介紹這三個問題的發生場景以及對應的解決方案。雪崩是指大量請求無法在redi...

快取雪崩 擊穿 穿透

1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...

快取雪崩 擊穿 穿透

快取擊穿 快取穿透 在同一時間快取資料集體失效,此時大量請求訪問失效資料,導致大量併發直接訪問資料庫造成資料庫壓力 將需要快取的資料進行分散失效處理,將快取的資料的失效時間設定乙個隨機值,避免大量快取資料在同一時間集體失效 將部分經常做查詢且不經常更新的資料的快取時間設定為永不失效 對於統一個key...