什麼是快取雪崩 快取穿透 快取擊穿以及解決方案

2021-10-09 19:28:53 字數 1704 閱讀 5558

快取穿透

快取擊穿

小總結參考

redis是面試中經常問到的,題目也非常多。快取雪崩、快取穿透、快取擊穿比較有代表性,這裡記錄一下。

快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。

解決方案

在做電商專案的時候,一般是採取不同分類商品,快取不同週期。在同一分類中的商品,加上乙個隨機因子。這樣能盡可能分散快取過期時間,而且,熱門類目的商品快取時間長一些,冷門類目的商品快取時間短一些,也能節省快取服務的資源。

使用集群快取,保證快取服務的高可用

這種方案就是在發生雪崩前對快取集群實現高可用,如果是使用 redis,可以使用 主從+哨兵 ,redis cluster 來避免 redis 全盤崩潰的情況。

ehcache本地快取 + hystrix限流&降級,避免mysql***

使用 ehcache 本地快取的目的也是考慮在 redis cluster 完全不可用的時候,ehcache 本地快取還能夠支撐一陣。

使用 hystrix進行限流 & 降級 ,比如一秒來了5000個請求,我們可以設定假設只能有一秒 2000個請求能通過這個元件,那麼其他剩餘的 3000 請求就會走限流邏輯。

然後去呼叫我們自己開發的降級元件(降級),比如設定的一些預設值呀之類的。以此來保護最後的 mysql 不會被大量的請求給打死。

開啟redis持久化機制,盡快恢復快取集群

一旦重啟,就能從磁碟上自動載入資料恢復記憶體中的資料。

防止雪崩方案如下圖所示:

快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,進而給資料庫帶來壓力。

解決方案

採用快取空值的方式,如果從資料庫查詢的物件為空,也放入快取,只是設定的快取過期時間較短,比如設定為60秒

快取擊穿是指熱點key在某個時間點過期的時候,而恰好在這個時間點對這個key有大量的併發請求過來,從而大量的請求打到db。

解決方案

可以將熱點資料的過期時間設定為永久有效

快取雪崩,是對key大量失效的情況、快取穿透,是對key不存在的情況、快取擊穿,是對熱點資料來說的。

例項——解讀什麼是redis快取穿透、快取雪崩和快取擊穿

什麼是快取雪崩、快取穿透、快取擊穿以及解決方案

阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案

快取世界中的三大問題及解決方案

redis常見面試題

什麼是快取穿透 快取雪崩 快取擊穿

快取穿透是指查詢乙個一定不存在的資料時,由於在快取中沒有這個key,這時會到db中去查詢,可是db中也沒有這條資料,這時也無法寫入快取,這就造成了快取穿透,如果這時有人利用這個漏洞頻繁攻擊應用,db就可能掛掉了 解決方案 可以把key存入快取中,value設定為空,過期時間最多不超過5分鐘 快取雪崩...

什麼是redis快取穿透,快取雪崩,快取擊穿

一.快取穿透 快取穿透是指查詢資料庫中一定不存在的資料,我們正常的操作流程,在查詢資料庫前,先去查詢快取,如果key不存在或者key過期失效,再去查詢資料庫,並把查詢到的物件放到快取中,如果查詢到的資料為null,不新增快取。流程 二.快取雪崩 快取雪崩可以理解為在某個時間段,快取集中過期,然後這段...

什麼是Redis快取穿透 快取雪崩 快取擊穿

快取穿透,是指查詢乙個資料庫一定不存在的資料。正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。採用快取空值的方式,也就是 流程 中第5步,如果從資料庫查詢的物件為空,也放入快取...