Redis三大問題 快取穿透 快取擊穿 快取雪崩

2021-10-24 15:44:34 字數 1373 閱讀 5722

快取擊穿

快取雪崩

前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,直接返回空結果。

快取穿透就是當使用者訪問一條資料時,快取和資料庫中都不存在,就會不斷的發起請求。如果使用者是攻擊者,會導致資料庫壓力過大。

解決方案:

快取空物件:當第一次訪問查詢不到資料時,將該key和對應的空值放入快取,並設定較短的失效時間,以應對短時間的大量該key的訪問。設定較短的失效時間是因為該空值可能會影響正常情況下對該key的訪問。

布隆過濾器:類似於雜湊表的一種演算法,用所有可能的查詢條件生成乙個bitmap,在進行資料庫查詢之前會使用這個bitmap進行過濾,如果不在其中則直接過濾,從而減輕資料庫層面的壓力。

快取擊穿是指快取中沒有但資料庫有的資料(一般是快取過期),由於併發使用者特別多,同時讀快取沒有資料,又同時訪問資料庫,引起資料庫壓力瞬間增大,造成過大壓力。

解決方案:

設定熱點資料永不過期

從redis上看,確實沒有設定過期時間,這就保證了,不會出現熱點key過期問題,也就是物理不過期。但是它會遇到乙個資料更新的問題,或者說資料不一致的問題。

在value中儲存過期時間,在編碼處理的時候,有條件(過期時間小於一分鐘)對快取資料進行更新,這個方案對效能最佳。

加互斥鎖

public

static string getdata

(string key)

throw interruptedexception

}finally

}else

}return result;

}

快取雪崩是指當快取中大批量的資料過期或者快取掛掉時,所有請求直接訪問資料庫,造成資料庫訪問量大增,引起資料庫壓力過大或者宕機。雪崩和擊穿的區別在於:擊穿是查詢同一條資料,而雪崩是許多不同的資料都查不到。解決方案:

避免快取設定相近的有效期;為有效期增加隨機值;統一規劃有效期,失效時間均勻分布。

redis有可能掛掉,多增加幾台redis例項,(一主多從或者多主多從),這樣一台掛掉之後其他的還可以繼續工作,其實就是搭建的集群。

在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量,對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。

對於一些熱門資料的持續讀取,這種快取資料也可以採取定時更新的方式來重新整理快取,避免自動失效。

快取永不過期,非同步更新。

談談redis快取三大問題(二) 快取雪崩

今天抽時間和大家聊聊redis的雪崩以及redis集群的演變過程。首先來說說什麼是redis的快取雪崩。如圖是乙個比較常見的業務流程圖,先去看快取是否存在,如果存在返回,如果不存在直接查資料庫,並更新快取。一般在設定快取的時候,都會去設定乙個失效時間,防止無用快取占用大量記憶體。常見的快取雪崩分為兩...

Redis快取三大問題解析

通俗來講,快取粒度問題就是我們在使用快取時,是將所有資料快取還是快取部分資料?快取粒度問題是乙個容易被忽視的問題,如果使用不當,可能會造成很多無用空間的浪費,可能會造成網路頻寬的浪費,可能會造成 通用性較差等情況,必須學會綜合資料通用性 空間占用比 維護性 三點評估取捨因素權衡使用。快取穿透是指查詢...

快取常見三大問題

之前常聽人說,但是沒有仔細想過這些問題。最近看 可伸縮服務架構 架構與中介軟體 中這些問題解釋的很好,也給出了一般解決方案,記錄一下。快取穿透 快取併發 快取雪崩常見的由於併發量大而導致。說明 快取穿透指的是使用不存在的key進行大量的高併發查詢,這導致快取無法命中,每次請求都要穿透到後端資料庫系統...