緩存中間件學習筆記 - 1 概述

1.1 緩存

緩存是將數據移動到速度較快的介質上, 以加快數據的處理速度。 使用緩存有兩個主要的好處: 首先, 將數據從比較慢的介質放到比較快的介質上, 加快數據的讀取速度; 將計算的結果存起來, 下次需要的時候直接從緩存中獲取, 避免重複計算。 

緩存可以對系統的性能有很大的提升, 表現爲這些方面: 增大系統吞吐量; 加快響應速度; 減少緩存層之後的模塊的壓力, 如數據庫。

 

1.2 緩存的適用場景

緩存主要用來存放哪些讀寫比很高, 並且很少變化的數據, 如一個管理系統的菜單, 電商系統的商品類目等信息。  一般的網站的數據請求是符合二八原則的, 即80%的請求將落在20%的數據上, 都有明顯的數據熱點,  所以緩存是一個很通用的性能優化手段。  在對網站進行性能優化時, 優先考慮使用緩存。 

網站性能優化第一定律: 優先使用緩存來優化性能

                                                                                               --- 《大型網站技術架構》, 李智慧(前阿里技術專家)

1.3 使用緩存的注意事項

不適合使用緩存的情況

  • 頻繁修改的數據不適合使用緩存。 
  • 沒有熱點的訪問

如果應用程序沒有熱點, 不遵循二八定律,即大部分的訪問都集中在小部分的數據中, 那麼緩存也就沒有什麼意義了, 因爲大部分數據在被再次訪問之前都已經刷出了緩存。

 

數據不一致與髒讀

使用了緩存, 那麼就要忍受數據在一段時間內因爲緩存沒有更新而導致的數據不一致問題。 如更新了一個商品信息, 但是由於緩存的存在, 還是讀到舊的數據。 可以通過在更新商品信息時, 讓緩存失效, 來強制讀到新的數據。

 

緩存可用性

數據庫時按照有緩存的前提來搭建的, 如果緩存突然大面積失效, 那麼本來由緩存分當的壓力, 都回到了數據庫上, 這時候就可能讓數據庫發生怠機。 這種情況被稱作緩存雪崩,發生這種故障, 甚至不能簡單地重啓緩存服務器和數據庫服務器來恢復訪問。

通過提高緩存的可用性, 可以減少緩存大面積失效的情況。 如使用分佈式緩存redis或者memcached, 每個緩存節點只存儲部分的數據, 那麼即使有一兩臺機器失效,只會丟失這部分的數據, 數據庫的壓力只會增加一小部分的壓力, 不會超出其負載能力。

 

緩存穿透問題

如果客戶端, 經常來請求一個根本不可能存在的數據, 那麼所有的請求都會落到數據庫上, 使用這種方式可以讓數據庫怠機。

預防的一個簡單的機制可以是,將這個空結果的查詢也緩存起來, 下次訪問也可以從緩存中獲取返回。

如果構造很多不存在的數據且不重複結果的查詢呢? 這個時候應該怎麼防備?

進行人機驗證, 可以抵擋住大部分的這種攻擊

 

緩存預熱

系統剛剛啓動時, 緩存中沒有數據, 這時候系統的性能表現不能讓人滿意。 可以通過在系統啓動時就加載一些熱點的數據, 來預熱緩存。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章