Redis:01緩存穿透和緩存雪崩及解決方案


Redis:01緩存穿透和緩存雪崩及解決方案

redis


目錄:

1、概念

2、解決方案

3、代碼案例

一、概念

1.1 緩存穿透(惡意請求):key對應的數據在數據庫不存在,每次針對key的請求從緩存獲取不到數據,從數據源也取不到數據(每次都要查詢數據庫,緩存形同虛設)。如:Redis緩存中沒有uid=10000的用戶信息,DB數據庫中也沒有。

1.2 緩存擊穿(key失效):redis中有對應key和數據,當key過期時,此時有大量請求過來,請求發現緩存中沒有數據,會從數據庫中加載數據並set到緩存中,從而壓垮數據源(數據庫)。

1.3 緩存雪崩(服務重啟/大量key失效):redis在一段時間內大量key失效。此時有大量請求,使請求直接命中數據庫,導致數據庫連接異常。

二、解決方案:

2.1 緩存穿透方案

布隆過濾 即在查詢之前需要驗證key的合法性或在數據庫命中為空時設置空的緩存對象(需要注意對業務的影響)。


Redis:01緩存穿透和緩存雪崩及解決方案

緩存穿透


2.2 緩存擊穿及緩存雪崩方案:

(1)給有失效時間的key加上一個隨機數值,避免key的集體失效。

(2)進行數據預熱(秒殺系統)將有可能會失效的key進行預先更新緩存時間。

(3)緩存備份 redis01失效後命中 redis02。

(4)加入鎖機制進行限流操作。

三、代碼樣例

3.1 布隆過濾(可自己根據業務定製過濾方式如:維護自己的合法key的Cache)。


Redis:01緩存穿透和緩存雪崩及解決方案

bloomfilter

3.2 緩存雪崩(接口限流或服務降級)

比如令牌桶算法限流


Redis:01緩存穿透和緩存雪崩及解決方案

token-limit


分享到:


相關文章: