面試連環炮系列(二十七):如何保證快取與資料庫的資料一致性
阿新 • • 發佈:2022-03-29
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