快取穿透問題及解決方案

2021-08-20 03:44:01 字數 619 閱讀 6651

快取穿透也被稱為「擊穿」。很多朋友對快取穿透的理解是:由於快取故障或者快取過期導致大量請求穿透到後端資料庫伺服器,從而對資料庫造成巨大衝擊。

這其實是一種誤解。

真正的快取穿透應該是這樣的:

在高併發場景下,如果某乙個key被高併發訪問,沒有被命中,出於對容錯性考慮,會嘗試去從後端資料庫中獲取,從而導致了大量請求達到資料庫,而當該key對應的資料本身就是空的情況下,這就導致資料庫中併發的去執行了很多不必要的查詢操作,從而導致巨大衝擊和壓力。

可以通過下面的幾種常用方式來避免快取傳統問題:

1、快取空物件

對查詢結果為空的物件也進行快取,如果是集合,可以快取乙個空的集合(非null),如果是快取單個物件,可以通過字段標識來區分。這樣避免請求穿透到後端資料庫。這種方式實現起來成本較低。

如果後面某個為空的記錄在資料庫中有資料了,該如何處理?

2、單獨過濾處理

對所有可能對應資料為空的key進行統一的存放,並在請求前做攔截,這樣避免請求穿透到後端資料庫。這種方式實現起來相對複雜。

Redis 快取穿透問題及解決方案

快取穿透問題 快取穿透是指查詢乙個根本不存在的資料,快取層和儲存層都不會命中,通常出 於容錯的考慮,如果從儲存層查不到資料則不寫入快取層。一般對於未命中的資料我們是按照如下方式進行處理的 1.快取層不命中。2.儲存層不命中,不將空結果寫回快取。3.返回空結果。快取穿透問題 在資料庫中未查找到資料,未...

快取穿透解決方案

1 先查快取,快取不存在查資料庫,資料庫中如果存在則存入快取 問題 大量不存在的資料導致資料庫的查詢頻次高,有900多萬次 因為該功能上線預設為不存在,所以正常使用者訪問也是每次都查詢 2 先查快取,快取中不存在查資料庫,資料庫如果存在則存結果入快取 如果不存在則存 1入快取 資料庫的查詢次數明顯降...

快取穿透 快取雪崩 快取擊穿及解決方案

快取穿透 查詢的資料在快取伺服器 redis 中沒有,就繞過快取伺服器 直接與資料庫進行io互動,對伺服器造成巨大壓力 解決方案 查詢資料在redis如果沒有,就將該資料設定為null放在redis中 防止暴力攻擊 或者使用布隆過濾器 本質上布隆過濾器是一種資料結構,比較巧妙的概率型資料結構 pro...