在前面學習我們都知道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...