快取雪崩 快取擊穿 快取穿透

2022-06-16 08:30:12 字數 946 閱讀 9495

1.快取雪崩

通常我們在資料量請求大或者熱點資料都會做快取,通常情況快取的資料是通過定時任務重新整理,或者查詢不到後,通過資料庫查詢後更新的,定時任務重新整理的場景就會有問題,因為所有的key會在同一時間失效,那麼在秒殺的場景中,如果快取失效,大量的請求全部落入資料庫,資料庫必然是扛不住的,可能還沒收到報警,實際上資料庫已經宕機了

應對這種場景的處理方法是:1)在批量往redis中存資料的時候,把每個key的失效時間都加乙個隨機值,這樣可以保證不會在同一時間大面積失效。2)電商應用目前使用redis都是集群部署,將熱點資料均勻分布在不同的redis分片中也能避免全部失效的問題。3)設定熱點資料永不過期,有資料更新時候,就同步更新快取

2.快取穿透

如果查詢快取和資料庫中都沒有的資料,使用者不斷的發起請求,可能這種使用者是攻擊者,這種攻擊會導致資料庫壓力過大,嚴重時會擊垮資料庫,比如說資料庫中的編號都是正數,使用者一直用小於0 的引數去請求,每次都是能夠繞開快取世界查庫的,資料庫也查不到資料,一直這麼高併發的請求,通常就很容易掛掉。

應用這種場景的處理方法是:1)介面服務層要增加對引數合法性的校驗,不要信任所有的呼叫者,該防範的還是需要防範 2)對不存在的資料的查詢介面也增加快取,快取時間可相對控制較短,比如5s等等,這樣做可以一定程度的減輕併發情況下的資料庫壓力 3)redis有乙個高階用法布隆過濾器(bloom filter),能利用高效的資料結構和演算法快速判斷出請求的key是否在資料庫中存在,不存在的可以直接返回,具體也還沒有使用過,待後續研究

3.快取擊穿

這個和快取雪崩的場景有點相似,快取雪崩是因為key的大面積同時生效導致請求全部到db從而導致db宕機,快取擊穿是指對乙個熱點key請求量非常大,這乙個key一直在扛著大併發,當這個key失效的瞬間,持續的高併發請求穿破快取直接請求到db上,類似於在乙個完好無損的冰面上鑿開了乙個洞

應對這種場景的處理方法是:1)設定快取用不過期,有變動時候主動更新快取 2)從資料庫讀取資料後更新快取增加互斥鎖

快取穿透 快取擊穿 快取雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...

快取穿透,快取擊穿,快取雪崩

所謂的快取穿透,簡單來講就是查詢某些不存在的key時,快取和資料庫查詢結果都為空,而空的結果又不被快取起來,而導致每次查詢都去請求資料庫層的情況。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。過程 快取不命中,進而導致每次查詢都去查詢資料庫,快取也就失去了作...

快取穿透快取擊穿快取雪崩

1 快取穿透 1.1 什麼是快取穿透 快取穿透,是指查詢乙個資料庫一定不存在的資料 核心 快取和資料庫該值不存在 正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。1.2 帶來的...