上一篇 <<<Redis集群模式的類型和缺陷匯總
下一篇 >>>Redis解決穿透擊穿問題時使用的布隆過濾器知識點
緩存穿透
1.場景【key不存在,高并發查詢數據庫】
緩存穿透是指使用不存在的key進行大量的高并發查詢,導致緩存無法命中,每次請求都要都要穿透到后端數據庫查詢,使得數據庫的壓力非常大,甚至導致數據庫服務壓死;
2.解決方案
a、接口層實現api限流、防御DDOS、接口頻率限制、網關實現黑名單、用戶授權、id檢查等;
b、從緩存和數據庫都取不到數據的話,一樣將數據庫空值放入緩存中,加上短時間的有效期(只適合單個key 隨機生成不同key、影響正常使用)
c、布隆過濾器
緩存擊穿
1.場景【單個熱點key失效時,高并發查詢數據庫】
在高并發的情況下,當一個緩存key過期時,因為訪問該key請求較大,多個請求同時發現緩存過期,因此對多個請求同時數據庫查詢、同時向Redis寫入緩存數據,這樣會導致數據庫的壓力非常大;
2.解決方案
a、使用分布式鎖
保證在分布式情況下,使用分布式鎖保證對于每個key同時只允許只有一個線程查詢到后端服務,其他沒有獲取到鎖的權限,只需要等待即可;這種高并發壓力直接轉移到分布式鎖上,對分布式鎖的壓力非常大。獲取到鎖的請求將數據寫入成功到redis中, 通知沒有獲取鎖的請求直接從Redis獲取數據即可
b、使用本地鎖
使用本地鎖與分布式鎖機制一樣,只不過分布式鎖適應于服務集群、本地鎖僅限于單個服務使用。
c、軟過期
設置熱點數據永不過期或者異步延長過期時間;
d、布隆過濾器
e、到期前的續命(在value設置一個比過期時間t0小的過期時間值t1,當t1過期的時候,延長t1并做更新緩存操作。)
緩存雪崩
1.場景【多個key同時失效,高并發查詢數據庫】
緩存雪崩指緩存服務器重啟(沒有持久化)或者大量的緩存集中在某個時間段失效,突然給數據庫產生了巨大的壓力,甚至擊垮數據庫的情況。
2.解決方案
1.對不用的數據使用不同的失效時間
2.使用集群化分攤部署我們key
3.使用二級緩存
A1為原始緩存,A2為拷貝緩存,A1失效時,可以訪問A2,A1緩存失效時間設置為短期,A2設置為長期
推薦閱讀:
<<<分布式緩存與本地緩存的區別
<<<Ehcache基礎知識
<<<SpringBoot整合Ehcache
<<<Redis的5種數據類型
<<<Redis存放實體對象的方式及區別
<<<Redis的應用場景匯總
<<<Redis高效及線程安全的真正原因
<<<Redis為啥要分為16個庫
<<<RDB和AOF持久化方式的區別
<<<Redis與數據庫的一致性解決方案
<<<SpringBoot整合Redis的注解版本完成數據緩存
<<<Redis的淘汰策略
<<<Redis的事務操作(Mult和Watch)知識點
<<<Redis的過期機制使用場景示例
<<<Redis實現分布式鎖的原理分析
<<<Redis分布式鎖的實現代碼示例
<<<使用Redisson工具實現分布式鎖
<<<Redis集群模式之主從復制原理及存在的缺陷
<<<Redis集群模式之哨兵模式
<<<Redis集群模式之Cluster去中心化分片集群
<<<Linux環境下安裝單機Redis
<<<Redis Cluster集群環境搭建
<<<Redis Cluster如何動態擴容與縮容
<<<Redis Cluster主從節點自動切換
<<<Redis集群模式的類型和缺陷匯總
<<<Redis解決穿透擊穿問題時使用的布隆過濾器知識點
<<<Redis與MySQL的數據同步解決方案
<<<阿里云的Canal框架實現Redis與Mysql同步原理及代碼示例
<<<阿里云的Canal框架配置
<<<Redis官方提出的redlock分布式鎖
<<<Redis的調優設置
<<<Redis常見問題匯總