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
公眾號:編碼磚家
出處:https://www.cnblogs.com/xiaoyangjia/
本文著作權歸作者所有,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置注明作者和原文鏈接,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452007.html
標籤:其他
上一篇:Java基礎——泛型
下一篇:資料結構 - (1)順序表
