快取穿透的概念很簡單,使用者想要查詢乙個資料,發現redis記憶體資料庫沒有,也就是快取沒有命中,於是向持久層資料庫查詢。發現也沒有,於是本次查詢失敗。當使用者很多的時候,快取都沒有命中,於是都去請求了持久層資料庫。這會給持久層資料庫造成很大的壓力,這時候就相當於出現了快取穿透。
這裡需要注意和快取擊穿的區別,快取擊穿,是指乙個key非常熱點,在不停的扛著大併發,大併發集中對這乙個點進行訪問,當這個key在失效的瞬間,持續的大併發就穿破快取,直接請求資料庫,就像在乙個屏障上鑿開了乙個洞
當儲存層不命中後,即使返回的空物件也將其快取起來,同時會設定乙個過期時間,之後再訪問這個資料將會從快取中獲取,保護了後端資料來源;
但是這種方法會存在兩個問題:
如果空值能夠被快取起來,這就意味著快取需要更多的空間儲存更多的鍵,因為這當中可能會有很多的空值的鍵;即使對空值設定了過期時間,還是會存在快取層和儲存層的資料會有一段時間視窗的不一致,這對於需要保持一致性的業務會有影響
快取雪崩是指,快取層出現了錯誤,不能正常工作了。於是所有的請求都會達到儲存層,儲存層的呼叫量會暴增,造成儲存層也會掛掉的情況。
這個思想的含義是,既然redis有可能掛掉,那我多增設幾台redis,這樣一台掛掉之後其他的還可以繼續工作,其實就是搭建的集群。
這個解決方案的思想是,在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。
資料加熱的含義就是在正式部署之前,我先把可能的資料先預先訪問一遍,這樣部分可能大量訪問的資料就會載入到快取中。在即將發生大併發訪問前手動觸發載入快取不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。
redis的雪崩,擊穿與穿透
redis的雪崩 例如在雙11期間,大量內容從存放在redis進行快取,但存放在redis的內容有過期時間,到過期時間後,快取內的大量資料失效,大量請求進入到資料庫,導致資料庫相應不及時,發生雪崩。解決方案 設定快取的失效時間,不讓快取都在同一時間失效,在使用快取同時初始化快取 對redis進行集群...
redis 雪崩,穿透,擊穿
雪崩 同一時間key大面積失效 多出現在定時任務重新整理時 處理方案 1,把每個key的失效時間都加乙個隨機值 2,設定熱點資料永不過期,有更新操作就更新快取 3,如果時集群,將熱點資料均勻分布在不同的redis庫仲 穿透 快取和資料庫仲都沒有的資料時,使用者不斷的發起請求 處理方案 1,在介面層增...
Redis雪崩 穿透 擊穿
1 定義 1.快取穿透是指查詢乙個一定不存在的資料,由於快取不命中,接著查詢資料庫也無法查詢出結果,2.雖然也不會寫入到快取中,但是這將會導致每個查詢都會去請求資料庫,造成快取穿透 2 解決方法 布隆過濾 1.對所有可能查詢的引數以hash形式儲存,在控制層先進行校驗,不符合則丟棄,從而避免了對底層...