redis快取雪崩、快取穿透、快取併發、快取預熱、快取降級講解
阿新 • • 發佈:2022-03-31
快取雪崩
- 資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查詢資料庫
導致資料庫CPU和記憶體負載過高,甚至資料庫伺服器掛掉
如何預防快取雪崩
- 快取的高可用性
- 快取降級: 快取降級指的是快取失效或者快取伺服器掛掉的情況下,不去訪問資料庫,直接返回預設資料或者服務的記憶體資料
降級一般是有損的操作,所以儘量減少降級對業務的影響程度 - redis備份和快速預熱
- 提前演練
快取穿透
- 快取穿透是指查詢一個不存在的資料,例如從快取redis沒有命中,需要從mysql資料庫查,查不到資料則不寫入快取
這將導致這個不存在的資料每次請求都會去從資料庫查,造成快取穿透
如何解決快取穿透
- 快取redis沒有命中,如果查詢資料庫也為空,直接設定一個預設值存放到快取,
這樣第二次到快取中獲取就有值了,而不會繼續訪問資料庫,
設定一個過期時間或者當有值的時候將快取中的值替換掉即可
快取併發
- 這裡的併發指的是多個redis client同時set key引起的併發問題,redis本身其實是單執行緒的
多個client併發操作,按照先到先執行的原則,先到的先執行,其餘的堵塞。
另外的解決方案是把redis.set操作放到佇列中使其序列化,必須得一個一個執行
快取預熱
- 快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統
這樣就可以避免使用者在請求的時候,先查詢資料庫,在寫到快取系統,使用者可以直接查詢事先被預熱的快取資料
快取預熱解決思路
- 直接寫個快取重新整理頁面,上線時手工操作
- 資料量不大,可以在專案啟動的時候自動進行載入
快取降級
- 當快取系統掛掉後,會有大量的請求訪問資料庫,我們可以使用快取降級不去訪問資料庫,直接返回預設值或者服務內的快取資料,
快取降級對應用是有損的,對業務應用系統中不核心的快取資料才能使用快取降級
以上就是快取雪崩、快取穿透、快取併發、快取預熱、快取降級的大致講解。