關於redis快取的雪崩和擊穿問題

2021-09-12 09:19:07 字數 801 閱讀 2457

在前面學習我們都知道redis不可能把所有的資料都快取起來(記憶體昂貴且有限),所以redis需要對資料設定過期時間,並採用的是惰性刪除+定期刪除兩種策略對過期鍵刪除。

如果快取資料設定的過期時間是相同的,並且redis恰好將這部分資料全部刪光了。這就會導致在這段時間內,這些快取同時失效,全部請求到資料庫中。

這就是快取雪崩

快取雪崩如果發生了,很可能就把我們的資料庫搞垮,導致整個服務癱瘓!

對於「對快取資料設定相同的過期時間,導致某段時間內快取失效,請求全部走資料庫。」這種情況,非常好解決:

對於「redis掛掉了,請求全部走資料庫」這種情況,我們可以有以下的思路:

舉個例子來說黑客想把我的資料庫搞垮,每次請求的id都是負數。這會導致我的快取就沒用了,請求全部都找資料庫去了,但資料庫也沒有這個值啊,所以每次都返回空出去。

快取穿透是指查詢乙個一定不存在的資料。由於快取不命中,並且出於容錯考慮,如果從資料庫查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,失去了快取的意義。

這就是快取穿透

快取穿透如果發生了,也可能把我們的資料庫搞垮,導致整個服務癱瘓!

解決快取穿透也有兩種方案:

redis的快取雪崩,穿透和擊穿

就拿我熟悉的 來說。當你訪問 時,前端需要渲染頁面,所以要從後端獲取到資料。資料 來?當然是資料庫 關聯式資料庫或者非關聯式資料庫 中。關係型資料庫 mysql 非關係型資料庫 redis 而mysql一般相對於redis讀寫效能較差,所以採用redis來儲存資料,而不是直接請求mysql。當後端接...

Redis快取擊穿,傳統,雪崩

redis的三種常見的使用問題 快取穿透 快取的資料db中不存在,快取中也不存在。但是高頻次的無結果查詢全部落在db上,從而影響db效能 快取擊穿 當熱點資料發生過期時。高頻次的訪問全部落在db上,從而影響db效能 快取雪崩 和快取穿透相似。很多的熱點資料同一時間過期。1.快取空值 針對空結果查詢進...

redis 快取穿透 擊穿 雪崩

介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id 0的直接攔截 從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key value對寫為key null,快取有效時間可以設定短點,如30秒 設定太長會導致正常情況也沒法使用 這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊 public o...