一、什么是緩存穿透,如何預防?
緩存穿透是指緩存和數據庫中都沒有的數據,而用戶不斷發起請求,請求直接打在了數據庫上。
對於緩存穿透的話一般來說只需要針對空值緩存就行,過期時間設置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。