1. 程式人生 > 資料庫 >商品詳情之多級快取架構和redis相關問題

商品詳情之多級快取架構和redis相關問題

1.0 多級快取架構圖

在這裡插入圖片描述

2.0 秒殺庫存超賣解決方案

在這裡插入圖片描述

3.0 redis 訪問傾斜/資料傾斜解決方案

在這裡插入圖片描述

4.0 redis 快取與資料庫不一致問題

在這裡插入圖片描述

5.0 redis快取穿透

快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷髮起請求。由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。
解決:
1:介面限流與熔斷,降級
2:對於像ID為負數或者ID遠遠超過定義的大小的非法請求資料直接過濾掉
3:存在的id,放入redis布隆過濾器BitMap
4:資料庫和快取都查詢不到的情況下,把空值存入到快取裡面,增加短效時間內部

6.0 redis快取擊穿

快取擊穿,是指一個key非常熱點,在不停的扛著大併發,大併發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在一個屏障上鑿開了一個洞
解決:
1、設定熱點資料永遠不過期。
2、介面限流與熔斷,降級。重要的介面一定要做好限流策略,防止使用者惡意刷介面,同時要降級準備,當介面中的某些 服務 不可用時候,進行熔斷,失敗快速返回機制。
3、使用互斥鎖,通過redis的setnx實現互斥鎖,使得訪問進資料庫,只有一個請求

7.0 redis 雪崩

快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是, 快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。

解決:
1、快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
2、介面限流與熔斷,降級
3、如果快取資料庫是分散式部署,將熱點資料均勻分佈在不同搞得快取資料庫中。
4、設定熱點資料永遠不過期。