1、 實時同步
- 要求強一致性
- 先查詢緩,若存查詢不到,再查DB,而後保存到緩存
- 更新緩存時,先更新數據庫,再將緩存的設置過時(建議不要去更新緩存內容,直接設置緩存過時)
2、 異步隊列
簡介
對於併發程度較高的,可採用異步隊列的方式同步數據,可採用kafka、RicketMQ等消息中間件處理消息生產和消費mysql
kafka優勢
- 數據放在了硬盤上,對硬盤進行了順序IO流存址,因此讀取效率高
kafka做用
- 異步數據同步
- 流量削峯:如同時給1W人打款,服務器壓力大,可進行異步操做,設置異步隊列,而後定時,在服務器空閒的時候一個一個進行打款操做
- 數據放在硬盤上,而不是內存中,保證消息隊列的數據不丟失
3、 阿里的同步工具canal
簡介
canal實現方式是模擬mysql slave和master的同步機制,監控DB bitlog的日誌更新來觸發緩存的更新,此種方法能夠解放程序員雙手,減小工做量,但在使用時有些侷限性。c++
Mysql主從複製原理簡析
- 該模型有兩種服務器:例如,master服務器專門用於數據的增刪改,slave服務器(1個或多個)專門用於數據查詢
- 如何保證兩種服務器數據的一致性?
- master服務器將操做中的改變記錄存放到二進制日誌文件中(binary log),這些記錄叫作二進制日誌事件(binary log events),咱們能夠經過show binlog events命令進行查看。
- Slave服務器會經過IO線程去讀取binary log文件中信息並複製到本身的relay log(中繼日誌)日誌文件中。
- Slave服務器在經過開啓SQL線程定時讀取檢查relay log,一旦發現有修改,就當即從新加載relay log文件中的信息,而後執行文件中的修改記錄,並反映到本身的服務器中。
canal原理簡析
- canal模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議
- mysql master收到dump請求,開始推送binary log給slave(也就是canal)
- canal解析binary log對象(原始爲byte流)
4、 用UDF自定義函數的方式
面對mysql的API進行編程,利用觸發器進行緩存同步,但UDF主要是c/c++語言實現,學習成本高。程序員
PS:sql
- 文章來自各類資源的整理,若有侵權請告知刪除。
- 轉載本文請註明出處