Redis快取擊穿,失效以及維度劃分

2021-10-16 22:21:16 字數 1220 閱讀 6889

一、redis快取

快取的使用場景基本包含如下兩種:

1、開銷大的複雜計算:以mysql為例子,一些複雜的操作或者計算(例如大量聯表操作、一些分組計

算),如果不加快取,不但無法滿足高併發量,同時也會給mysql帶來巨大的負擔。

2、加速請求響應:即使查詢單條後端資料足夠快(例如select*from tablewhere id=),那麼依然可以使用緩

存,以redis為例子,每秒可以完成數萬次讀寫,並且提供的批量操作可以優化整個io鏈的響應時間。

二、 快取維度劃分

三、快取擊穿

1、 快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),這時由於併發使用者特別多,同時

讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大,造成過大壓力。

2、為什麼會出現快取擊穿?

一般在使用快取去快取資料時,會使用「快取+過期時間」的策略既可以加速資料讀寫,又可以保證資料的定期更新,這個模式在一般情況的業務都是可以滿足的。

但是這樣也會出現兩個致命問題:

重建快取不能在短時間完成,可能是乙個複雜的計算,例如複雜的sql,多次io,多個依賴等。

3、在快取失效的瞬間,有大量執行緒來重建快取,造成後端負載加大,甚至可能讓應用崩潰,如果要解決這個

問題至少是遵循如下:

四、快取擊穿問題解決

1、互斥鎖

}?>說明:從redis獲取資料,如果值不為空,則直接返回值,否則執行下面的步驟:

2、key設定永不過期

redis快取擊穿,失效以及熱點key解決方案

查詢乙個資料庫中不存在的資料,比如商品詳情,查詢乙個不存在的id,每次都會訪問db,如果有人惡意破壞,很可能直接對db造成過大地壓力。解決方案 當通過某乙個key去查詢資料的時候,如果對應在資料庫中的資料都不存在,我們將此key對應的value設定為乙個預設的值,比如 null 並設定乙個快取的失效...

快取擊穿 失效以及熱點key問題

快取擊穿 失效以及熱點key問題 快取擊穿 查詢乙個資料庫中不存在的資料,比如商品詳情,查詢乙個不存在的id,每次都會訪問db,如果有人惡意破壞,很可能直接對db造成過大地壓力。快取擊穿的解決方案 當通過某乙個key去查詢資料的時候,如果對應在資料庫中的資料都不存在,我們將此key對應的value設...

Redis快取穿透,快取雪崩以及快取擊穿

概念 訪問乙個不存在的key,快取不起作用,請求會穿透到db,流量大時db會掛掉。快取穿透的概念很簡單,使用者想要查詢乙個資料,發現redis記憶體資料庫沒有,也就是快取沒有命中,於是向持久層資料庫查詢。發現也沒有,於是本次查詢失敗。當使用者很多的時候,快取都沒有命中,於是都去請求了持久層資料庫。這...