1. 程式人生 > 其它 >面試連環炮系列(二十七):如何保證快取與資料庫的資料一致性

面試連環炮系列(二十七):如何保證快取與資料庫的資料一致性

1. 如何保證快取與資料庫的資料一致性?

要保持資料強一致性,只能將讀請求和寫請求序列化,在同一個記憶體佇列裡執行。但是序列化會導致系統的吞吐量大幅度降低,多用幾倍的機器去支撐線上的請求。

2. 如果只要資料最終一致性,該怎麼做呢?

  • 快取設定過期時間。
  • 讀的時候,先讀快取,快取沒有的話,就讀資料庫,然後取出資料後放入快取,同時返回響應。
  • 更新資料的時候,先更新資料庫,然後再刪除快取。

3. 為什麼是刪除快取,而不是更新快取?

  • 刪除比更新更快捷。比如有些快取值是由多個數據計算出來的,如果計算比較耗時,在高併發下,更新快取的方式增加了讀快取不一致的概率。
  • 有些快取是冷資料,刪除快取等於是將更新快取延遲到了讀請求的時刻。

4. 如果刪除快取失敗了,怎麼解決?

  • 將刪除快取的操作交給訊息佇列,刪除了失敗重試,但是這樣對業務程式碼侵入比較強。
  • 採用阿里的Canal,它可以訂閱資料庫的binlog,獲得資料進行刪除快取操作。

參考(摘抄的文字版權屬於原作者):

https://www.jianshu.com/p/fbe6a7928229
https://blog.csdn.net/chang384915878/article/details/86756463
https://www.codingbrick.com/archives/542.html