redis是如何實現主從同步機制的?
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,同步使用的是發布/訂閱機制。
按照同步的內容可以分為全量同步和部分同步;
按照同步的時機可以分為初始化同步和實時數據同步;
初始化同步:
初始化同步一般是加掛子節點,做全量同步。
1、slave啟動的時候會向master發送同步指令SYNC,master接收到并調用SYNC的syncCommand函數做同步處理。
2、syncCommand函數會啟動rdbSaveBackground備份進程(如有該進程存在不需創建啟動)做備份操作,備份進程啟動rdbSave函數保存備份文件rdb。
3、master節點監控備份程序執行完畢后,會向slave發送rdb文件。
實時數據同步:
在一般redis主從模式中,主節點作為寫節點,從節點為讀節點。主節點在接受到用戶寫操作后會通過,通過內部函數向slave節點通知進行數據變更,該數據同步為部分數據同步。
需要說明的是主從復制不會阻塞 master,在同步數據時,master 可以繼續處理 client 請求。同時在主從模式下只有一個主節點,可以有多個slave節點。健康檢查發現主節點不可用的時候會選擇從slave節點中選擇一個升級為master,一般情況下,這種主從通過哨兵模式實現。