前言
(面試場景)
先更新數據庫,再刪除緩存
(問題描述)
先刪除緩存,再更新數據庫
(問題描述)
解決方案
大前提:使用緩存就要容忍數據不一致。能保證最終一致性即可。
設置有效期
好處:緩存超過有效期被淘汰之後,程序會從數據庫獲取最新的數據重新放入緩存,保持一致性。
壞處:因爲緩存會失效,會引發緩存擊穿、緩存雪崩等問題。
加鎖
不管是單機鎖還是分佈式鎖,這種做法可以保證不同線程之間的操作不會出現不確定的結果,但是實際上在項目中並不會採用這種做法。
所有涉及緩存和數據庫的操作都加上鎖,極大地降低了處理併發的能力。
緩存中心
上面這些問題歸結起來,就是修改緩存的入口太多。
那麼爲了解決這些問題,我們可以把緩存統一由一個模塊來進行管理。
(示意圖)
(代碼示例)
預熱
(示意圖)
監聽日誌,更新緩存
(示意圖)
(工具:canal)