Redis緩存和數據庫一致性解決策略

1、 實時同步

  • 要求強一致性
  • 先查詢緩,若存查詢不到,再查DB,而後保存到緩存
  • 更新緩存時,先更新數據庫,再將緩存的設置過時(建議不要去更新緩存內容,直接設置緩存過時)

2、 異步隊列

簡介

對於併發程度較高的,可採用異步隊列的方式同步數據,可採用kafka、RicketMQ等消息中間件處理消息生產和消費mysql

kafka優勢

  1. 數據放在了硬盤上,對硬盤進行了順序IO流存址,因此讀取效率高

kafka做用

  1. 異步數據同步
  2. 流量削峯:如同時給1W人打款,服務器壓力大,可進行異步操做,設置異步隊列,而後定時,在服務器空閒的時候一個一個進行打款操做
  3. 數據放在硬盤上,而不是內存中,保證消息隊列的數據不丟失

3、 阿里的同步工具canal

簡介

canal實現方式是模擬mysql slave和master的同步機制,監控DB bitlog的日誌更新來觸發緩存的更新,此種方法能夠解放程序員雙手,減小工做量,但在使用時有些侷限性。c++

Mysql主從複製原理簡析

  • 該模型有兩種服務器:例如,master服務器專門用於數據的增刪改,slave服務器(1個或多個)專門用於數據查詢
  • 如何保證兩種服務器數據的一致性?
    1. master服務器將操做中的改變記錄存放到二進制日誌文件中(binary log),這些記錄叫作二進制日誌事件(binary log events),咱們能夠經過show binlog events命令進行查看。
    2. Slave服務器會經過IO線程去讀取binary log文件中信息並複製到本身的relay log(中繼日誌)日誌文件中。
    3. Slave服務器在經過開啓SQL線程定時讀取檢查relay log,一旦發現有修改,就當即從新加載relay log文件中的信息,而後執行文件中的修改記錄,並反映到本身的服務器中。

canal原理簡析

  1. canal模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議
  2. mysql master收到dump請求,開始推送binary log給slave(也就是canal)
  3. canal解析binary log對象(原始爲byte流)

4、 用UDF自定義函數的方式

面對mysql的API進行編程,利用觸發器進行緩存同步,但UDF主要是c/c++語言實現,學習成本高。程序員


PS:sql

  1. 文章來自各類資源的整理,若有侵權請告知刪除。
  2. 轉載本文請註明出處
相關文章
相關標籤/搜索