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

2021-10-07 12:57:15 字數 1281 閱讀 5893

什麼是快取穿透?

快取穿透是指查詢的資料,在redis資料庫中沒有,也就是快取未命中,然後去到持久層資料庫中查詢,資料還是沒有,然後當大量查詢空資料的情況出現,會給持久層資料庫造成巨大的壓力,就會造成快取穿透的情況。(相當於一直查詢沒有的空資料)

如何解決快取穿透?

1.使用布隆過濾器布隆過濾器是一種資料結構,比較巧妙的概率型資料結構(probabilistic data structure),特點是高效地插入和查詢,可以用來告訴你 「某樣東西一定不存在或者可能存在」。

2.快取空物件

即使在資料庫中沒有查詢到資料,也給快取設定個空值,設定乙個比較短的過期時間,防止同一時間內多次查詢乙個不存在的資料來攻擊的情況。

但是存在兩個問題:

如果空值能夠被快取起來,這就意味著快取需要更多的空間儲存更多的鍵,因為這當中可能會有很多值為空的鍵

即使對空值設定了過期時間,還是會存在快取層和儲存層的資料會有一段時間視窗的不一致,這對於需要保持一致性的業務會有影響。

什麼是快取擊穿?

快取擊穿指高熱點的資料,大量的查詢請求查詢高熱點資料,當高熱點的快取資料過期的一瞬間,在高併發的情況下,大量請求去訪問持久層資料庫來查詢該資料,造成資料庫壓力過大,造成快取擊穿。

(與快取穿透不同的地方在於,這是相當於乙個點,而且這個是能在持久層資料庫查詢到,而快取穿透在持久層資料庫也無法查詢到。)

如何解決快取穿透?

設定熱點資料永不過期

加互斥鎖,可以使用分布式鎖,保證乙個key同時只有乙個執行緒去查詢,將高併發的壓力轉移到分布式鎖,對分布式鎖的要求很高。

什麼是快取雪崩?

快取雪崩是指在同一時刻內,大量的快取資料同時過期,導致一堆各種查詢請求直接到資料庫,造成資料庫壓力過大,也有一種是因為快取伺服器宕機造成,一瞬間將資料庫壓垮,這種更加嚴重。

如何解決快取雪崩?

搭建redis集群,保證redis的高可用,一台宕機後另一台快速補上

同樣可以加互斥鎖,使乙個key同時只有乙個執行緒訪問

鍵的過期時間盡量保持乙個隨機性,防止同一時刻內大量過期,讓過期的時間點盡量均勻

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

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

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

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

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

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