Redis缓存击穿,穿透,雪崩等问题
雪崩(隨機過期時間、永不過期)、
穿透(表示惡意請求,在系統端判斷是否符合規則,比如id<0,布隆過濾器)、
擊穿(查詢加for update,永不過期)
?
redis緩存穿透:查詢一個數據庫中不存在的數據,比如商品詳情,查詢一個不存在的ID,每次都會訪問DB,如果有人惡意破壞,很可能直接對DB造成過大地壓力
解決方案:當通過某一個key去查詢數據的時候,如果對應在數據庫中的數據都不存在,我們將此key對應的value設置為一個默認的值,比如“NULL”,并設置一個緩存的失效時間,這時在緩存失效之前,所有通過此key的訪問都被緩存擋住了。后面如果此key對應的數據在DB中存在時,緩存失效之后,通過此key再去訪問數據,就能拿到新的value了。 or 布隆過濾器
reds緩存雪崩:是指在我們設置緩存時采用了相同的過期時間,導致緩存在某一時刻同時失效,請求全部轉發到DB,DB瞬時壓力過重雪崩。
解決方案:將系統中key的緩存失效時間均勻地錯開,防止統一時間點有大量的key對應的緩存失效。比如我們可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重復率就會降低,就很難引發集體失效的事件。
redis緩存擊穿(熱點Key):緩存中的一個Key(比如一個促銷商品),在某個時間點過期的時候,恰好在這個時間點對這個Key有大量的并發請求過來,這些請求發現緩存過期一般都會從后端DB加載數據并回設到緩存,這個時候大并發的請求可能會瞬間把后端DB壓垮。
解決方案:使用互斥鎖(mutex key)。對緩存查詢加鎖,如果KEY不存在,就加鎖,然后查DB入緩存,然后解鎖;其他進程如果發現有鎖就等待,然后等解鎖后返回數據或者進入DB查詢
?
總結
以上是生活随笔為你收集整理的Redis缓存击穿,穿透,雪崩等问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 激光计算机基本原理,技巧:三分钟了解激光
- 下一篇: a频繁连接不上redis_解决Redis