10個常見的快取使用誤區

csdn發表於2014-07-29

  在日常工作中,開發者經常利用快取來進行優化站點或優化應用程式。但在實際應用中,在使用快取時,總是那麼不盡如意。這什麼原因呢?本文,筆者收集了最為常見的十大快取誤區以及使用建議。我們一起來看下 :

  1.  依賴預設的序列化。

  預設的序列化處理方式可能會消耗大量的CPU資源,特別是處理複雜型別資料時。所以建議要根據語音和環境的不同,採用最優化的序列化和反序列化方式。

  2.  在單一快取中儲存大物件資料。

  由於序列化和反序列化需要一定的資源開銷,處於併發負載時,大物件圖形資料的頻繁讀取有可能會讓伺服器的CPU崩潰。相反,不妨考慮把大物件資料打散為較小的子物件,之後再各自進行快取。根據你的需求讀取最小的資料單元。

  3.  在不同程式間使用快取共享物件。

  出現競態條件(Race conditions)時,當寫程式也參與其中,同時剛好程式的某部分也訪問同一緩衝物件,情況會變得更壞。採取外部鎖機制是有必要的。

  4.  儲存資料後立馬進行快取。

  千萬不要倉促行事,即使是剛寫入不久,當儲存資源緊張時,一個快取足以阻礙程式執行。所以用程式碼來進行快取空值返回檢查是很有必要的。

  5.  使用巢狀物件儲存全集合。

  由於序列化的影響,執行一次全集合儲存會導致程式執行變慢。有鑑於此,單獨對獨立物件進行快取可以實現分開讀取,減少序列化影響。

  6.  對父子物件採取統一與單獨混用的儲存方式。

  有時候一個物件可能擁有兩個或更多的父物件。根據統一物件本身的鍵進行快取以便不會把同一物件儲存於不同地方,這樣父物件可以按需訪問子物件。

  7.  對配置資訊進行快取。

  使用程式的本地靜態變數來儲存配置資料。快取資料訪問是有代價的,所以要儘可能把影響減到最低。

  8.  對活性物件進行快取,例如:流,檔案,註冊資訊或者網路。

  不要嘗試對上述等包含引用資訊的活性物件進行快取。因為當快取資料被刪除後,之前快取的活性物件不會被刪除,這樣會造成系統資源洩漏。

  9.  對同一物件採取多鍵儲存。

  這樣或許在使用一個鍵和索引號來進行訪問時帶來便利。如果一個快取是in-memory的,這樣做是可行的,因為快取中包含了同一物件的引用資訊,也就是說一旦該物件發生變更,都可以透過兩邊的訪問路徑進行檢視。如果是遠端(外部)快取,任何變更的發生都是不可見的,所以這樣會導致同步問題的產生。

  10.在連續儲存中進行更新或刪除後沒有及時更新相應快取物件。

  在一個遠端快取中,資料以拷貝方式儲存,所以當更新物件時,快取不會被同步更新。快取必須被明確指定,才能根據變更而進行更新。在in-memory快取中,一個物件發生的變更是對所有人可見的。在刪除時情況類似,刪除一個物件時,在快取中不會被同步刪除。這取決於程式本身如何確保快取物件被正確刪除。

  英文出自:highscalability

相關文章