什么是緩存穿透、緩存擊穿、緩存雪崩?如何預防?


一、什么是緩存穿透,如何預防?

緩存穿透是指緩存和數據庫中都沒有的數據,而用戶不斷發起請求,請求直接打在了數據庫上。 

對於緩存穿透的話一般來說只需要針對空值緩存就行,過期時間設置5-10分鍾,這樣就流量就不會打在數據庫上導致死機宕機。

 

二、什么是緩存擊穿,如何預防?

緩存擊穿,是指一個key非常熱點,在不停的扛着大並發,大並發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大並發就穿破緩存,直接請求數據庫,就像在一個屏障上鑿開了一個洞。

緩存擊穿的話,設置熱點數據永遠不過期。或者加上互斥鎖就能搞定了。

 

二、什么是緩存雪崩,如何預防?

緩存雪崩,是指在某一個時間段,緩存集中過期失效。

雪崩其實也可以做到提前預防,那就是用到過期時間的key,時間全部錯開,此外,有些數據可以做永久保存的話那就直接保存好了,這樣就不會造成大面積的key失效了。

1.永不過期

比如某些熱點數據可以設置永不過期。

2.過期時間錯開

處理緩存雪崩簡單,在批量往Redis存數據的時候,把每個Key的失效時間都加個隨機值就好了,這樣可以保證數據不會在同一時間大面積失效。

如果Redis是集群部署,將熱點數據均勻分布在不同的Redis庫中也能避免全部失效的問題。

setRedis(Key,value,time + Math.random() * 10000)

3.多緩存結合

Redis結合ehcache或者memcached,先查redis再查memcached。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM