天天看點

什麼是緩存穿透和緩存雪崩?【緩存問題】【劉新宇】

緩存問題

1 緩存穿透

緩存隻是為了緩解資料庫壓力而添加的一層保護層,當從緩存中查詢不到我們需要的資料就要去資料庫中查詢了。如果被黑客利用,頻繁去通路緩存中沒有的資料,那麼緩存就失去了存在的意義,瞬間所有請求的壓力都落在了資料庫上,這樣會導緻資料庫連接配接異常。

解決方案:

  1. 約定:對于傳回為NULL的依然緩存,對于抛出異常的傳回不進行緩存,注意不要把抛異常的也給緩存了。采用這種手段的會增加我們緩存的維護成本,需要在插入緩存的時候删除這個空緩存,當然我們可以通過設定較短的逾時時間來解決這個問題。
什麼是緩存穿透和緩存雪崩?【緩存問題】【劉新宇】
  1. 制定一些規則過濾一些不可能存在的資料,小資料用BitMap,大資料可以用布隆過濾器,比如你的訂單ID 明顯是在一個範圍1-1000,如果不是1-1000之内的資料那其實可以直接給過濾掉。
什麼是緩存穿透和緩存雪崩?【緩存問題】【劉新宇】

2 緩存雪崩

緩存雪崩是指緩存不可用或者大量緩存由于逾時時間相同在同一時間段失效,大量請求直接通路資料庫,資料庫壓力過大導緻系統雪崩。

什麼是緩存穿透和緩存雪崩?【緩存問題】【劉新宇】

1、給緩存加上一定區間内的随機生效時間,不同的key設定不同的失效時間,避免同一時間集體失效。比如以前是設定10分鐘的逾時時間,那每個Key都可以随機8-13分鐘過期,盡量讓不同Key的過期時間不同。

2、采用多級緩存,不同級别緩存設定的逾時時間不同,及時某個級别緩存都過期,也有其他級别緩存兜底。

3、利用加鎖或者隊列方式避免過多請求同時對伺服器進行讀寫操作。

多思考也是一種努力,做出正确的分析和選擇,因為我們的時間和精力都有限,是以把時間花在更有價值的地方。

繼續閱讀