關於緩存擊穿

什麼是緩存擊穿?java

咱們先來看一段經典的代碼,關於緩存使用的數據庫

查詢先從緩存裏面獲取,緩存若是沒有,那麼再從數據庫查詢,而且寫入緩存。緩存

注意:在實際開發中,咱們通常在緩存中,存儲的數據結構是JSON字符串。數據結構

那麼 就會有一個問題,假如從數據查詢須要1秒時間app

那麼這1秒內請求都會直接到db,緩存被擊穿,若是請求特別大的時候,可能數據庫就會掛掉。ide

 

那應該那麼解決? 咱們通常採用,同步+雙重檢查的方式 優化

請看代碼spa

當第一次從緩存獲取失敗,咱們就同步blog

當緩存失效之後開發

第二次進來以及後面的請求,都會從緩存裏面獲取

而第一次請求進來的請求會直接查詢數據庫會放入緩存中。

優化總結:

 

思考1 在實際開發中,其實緩存的邏輯是差很少,只是獲取數據的方式不同?想一想能不能抽象下?

這裏我作個代碼演示

 

 

  

實際調用的時候

List<Content> contents = contentServImp.getData("cache" + cateId, 20L, new CacheLoader<List<Content>>() {
			@Override
			public List<Content> getData() {
		         List<Content> contents = contentMapper.selectByExample(null);
	                 return contents;
			}
		});
相關文章
相關標籤/搜索