《高併發系統實戰課》學習筆記 day2 關係型和統計型數據緩存刷新

緩存一致:讀多寫少時,如何解決數據更新緩存不同步。

對數據進行歸類整理,讓系統的數據更容易做緩存。爲了降低數據庫的壓力,需要逐步對你係統增加緩存。
做緩存需要考慮性價比,一般來說只有熱點數據放到緩存才更有價值。

臨時熱緩存,就是當數據第一次使用的時候,同時將數據放到緩存當中,短期內如果再次有類似的查詢就可以快速從緩存中獲取,短期內如果再次有類似查詢就可以快速從緩存中獲取,這個方法能有效降低數據庫的查詢壓力。

關係型和統計型數據緩存刷新

首先是人工維護緩存方式。關係型數據或統計結果緩存刷新存在一定的難度,核心再於這些統計是由多條數據計算而成的,當我們對這類數據更新緩存時,很難識別出要刷新那些關聯緩存。對此,我們需要人工在一個地方記錄或者定義特殊刷新邏輯來實現相關緩存的更新。

不過這種方式比較精細,如果刷新緩存很多,那麼緩存更新會比較慢,並且存在延遲。而且人工書寫還需要考慮如何查找到新增數據關聯的所有id,因爲新增數據沒有登記在id內,人工編碼維護會很麻煩。
除了人工維護緩存外,還有一種方式就是通過訂閱數據庫來找到ID數據變化。我們可以使用Maxwell或Cannal對mysql更新進行監控。


這種變更信息會推送到Kafka內,我們可以根據對應的表和具體的SQL確認更新涉及的數據ID,然後根據腳本內設定好的邏輯對相關key進行例如用戶更新了暱稱,那麼緩存更新服務就能知道需要更新 user_info_9527 這個緩存,同時根據配置找到並且刪除其他所有相關的緩存。

很顯然,這種方式的好處是能及時更新簡單的緩存,同時核心系統會給子系統廣播同步數據更改,代碼並不複雜;缺點是複雜的關聯關係刷新,仍舊需要通過人工寫邏輯來實現。

如果我們表內的數據更新很少,那麼可以使用版本號緩存設計

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