1. 程式人生 > 程式設計 >Redis快取和資料庫一致性解決策略

Redis快取和資料庫一致性解決策略

一、 實時同步

  • 要求強一致性
  • 先查詢緩,若存查詢不到,再查DB,然後儲存到快取
  • 更新快取時,先更新資料庫,再將快取的設定過期(建議不要去更新快取內容,直接設定快取過期)

二、 非同步佇列

簡介

對於併發程度較高的,可採用非同步佇列的方式同步資料,可採用kafka、RicketMQ等訊息中介軟體處理訊息生產和消費

kafka優點

  1. 資料放在了硬碟上,對硬碟進行了順序IO流存址,所以讀取效率高

kafka作用

  1. 非同步資料同步
  2. 流量削峰:如同時給1W人打款,伺服器壓力大,可進行非同步操作,設定非同步佇列,然後定時,在伺服器空閒的時候一個一個進行打款操作
  3. 資料放在硬碟上,而不是記憶體中,保證訊息佇列的資料不丟失

三、 阿里的同步工具canal

簡介

canal實現方式是模擬mysql slave和master的同步機制,監控DB bitlog的日誌更新來觸發快取的更新,此種方法可以解放程式設計師雙手,減少工作量,但在使用時有些侷限性。

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流)

四、 用UDF自定義函式的方式

面對mysql的API進行程式設計,利用觸發器進行快取同步,但UDF主要是c/c++語言實現,學習成本高。


PS:

  1. 文章來自各種資源的整理,如有侵權請告知刪除。
  2. 轉載本文請註明出處