快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念
程式碼地址: https://gitee.com/crazyliyang/video-teaching.git
視訊地址: https://www.bilibili.com/video/BV1Ha411c7hB
1. 快取穿透
快取穿透,是指查詢一個資料庫一定不存在的資料。
正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。
查詢一個根部不存在的Key, 必然就會每次都去查詢資料庫,而每次查詢都是空,每次又都不會進行快取。假如有惡意攻擊,就可以利用這個漏洞,對資料庫造成壓力,甚至壓垮資料庫.
程式碼流程如下:
/**
1.引數傳入物件主鍵ID
2.根據redisKey從快取中獲取物件
3.如果快取物件不為空,直接返回
4.如果快取物件為空,進行資料庫查詢
5.如果從資料庫查詢出的物件不為空,則放入快取
*/
public ProductEntity getById(Serializable id) {
String redisKey = buildKey(String.valueOf(id)); // 根據ID 構建rediskey
String redisValue = redisOperations.get(redisKey); // 2.根據redisKey從快取中獲取物件
if (redisValue != null) { // 3.如果快取物件不為空,直接返回
return JSONUtil.parseObject(redisValue, ProductEntity.class); //直接返回;
} else { // 4.如果快取物件為空,進行資料庫查詢
ProductEntity product = getBaseMapper().selectById(id);
if(product !=null){// 5.如果從資料庫查詢出的物件不為空,則放入快取
String jsonString = JSONUtil.toJSONString(product);
redisOperations.set(redisKey, jsonString);
return product;
}
return null;
}
}
2. 快取雪崩 (快取失效)
快取雪崩,是指在某一個時間段,快取集中過期, 集中失效(可能是物理原因).
舉例:
2.1 馬上就要到雙十一零點( 00:00 ),很快就會迎來一波搶購,大量的併發訪問, 這波熱門商品時間比較集中的放入了快取(可以理解為統一時間併發的) , 假設快取是一個小時。那麼到了凌晨一點鐘 ( 01:00 ) 的時候,這批商品的快取就都過期了。也就是快取集中過期, 集中失效. 而再對這批商品的訪問查詢,就都落到了資料庫上,對於資料庫而言,就會產生週期性的壓力波峰。
2.2 系統在某一個大量併發訪問的時候, 突然快取伺服器當機, 快取突然全部丟失, 全部失效 (物理原因)
此時大量的快取失效導致, 大量併發請求到達資料庫DB, 給資料庫造成壓力衝擊, 這就是快取雪崩.
3. 快取擊穿 (快取併發)
快取擊穿. 是指一個key非常熱點,在不停的扛著大併發,大併發集中對這一個key進行訪問,
當這個key在失效的瞬間,持續的大併發就擊穿快取,大量的併發直接請求資料庫, 造成資料庫的壓力,
就像在一個屏障上鑿開了一個洞。
相關文章
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- Redis快取穿透、快取雪崩、redis併發問題分析Redis快取穿透
- 快取穿透 快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- 快取穿透、快取擊穿、快取雪崩快取穿透
- Java高併發快取架構,快取雪崩、快取穿透之謎Java快取架構穿透
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- 快取穿透、快取擊穿、快取雪崩概念及解決方案快取穿透
- 快取穿透、快取擊穿、快取雪崩區別快取穿透
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- Redis 面試常見問題———快取雪崩、快取擊穿以及快取穿透Redis面試快取穿透
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- Redis詳解(十二)------ 快取穿透、快取擊穿、快取雪崩Redis快取穿透
- 什麼是redis快取雪崩、快取穿透、快取擊穿Redis快取穿透
- Redis快取穿透、快取雪崩、快取擊穿好好說說Redis快取穿透
- 快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 快取穿透、快取擊穿、快取雪崩區別和解決方案快取穿透
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- 面試總結 —— Redis “快取穿透”、“快取擊穿”、“快取雪崩”面試Redis快取穿透
- Redis 的高效能快取機制的三類問題:快取擊穿、快取雪崩 和 快取穿透Redis快取穿透
- Redis 快取擊穿(失效)、快取穿透、快取雪崩怎麼解決?Redis快取穿透
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 淺談快取寫法(一):快取的雪崩和穿透快取穿透
- 快取穿透、快取擊穿、快取雪崩的場景以及解決方法快取穿透
- 十分鐘徹底掌握快取擊穿、快取穿透、快取雪崩快取穿透
- 面試官:快取穿透、快取雪崩和快取擊穿是什麼?面試快取穿透
- Redis 快取雪崩,快取擊穿和快取穿透技術方案總結Redis快取穿透
- 一文讀懂快取穿透、快取擊穿、快取雪崩及其解決方案快取穿透
- 什麼是redis的快取雪崩與快取穿透Redis快取穿透
- Redis 快取穿透、快取雪崩原理及解決方案Redis快取穿透
- Redis快取穿透和雪崩Redis快取穿透
- Redis快取穿透與雪崩Redis快取穿透