redis數據淘汰原理
redis過期數據刪除策略
redis server事件模型
redis cluster mget 引發的討論
redis 3.x windows 集群搭建
redis 命令執行過程
redis string底層數據結構
redis list底層數據結構
redis hash底層數據結構
redis set底層數據結構
redis zset底層數據結構
redis 客戶端管理
redis 主從同步-slave端
redis 主從同步-master端
redis 主從超時檢測
redis aof持久化
redis rdb持久化
redis 數據恢復過程
redis TTL實現原理
redis cluster集群建立
redis cluster集群選主
?redis 主從同步的過程始於壹系列類似tcp三次握手的過程,歸於"sync/psync"命令。分析redis主從同步master端的處理邏輯需要從syncCommand的函數開始進行分析。
?redis 主從同步過程中 master的執行內容 包括:
?整個處理邏輯主要分為處理 部分同步命令psync 和 全量同步命令sync ,整個交互過程如下
需要針對觸發bgsave命令的部分作下詳細說明,因為這個是核心的關鍵點:
?判斷能夠通過部分數據同步實現的邏輯很簡單,主要從兩個維度進行判斷:
?眾所周知rdb文件生成是內部fork新的線程去執行rdb生成過程的,通過rdbSaveBackground的函數可以看出來內部通過fork()去實現rdb文件的生成過程。
? 在fork的線程當中執行rdbSave實現rdb文件的生成過程。
? rdb文件的生成過程其實挺簡單的 ,大概流程如下:
?通過檢查server.rdb_child_pid或者server.aof_child_pid確認是否執行rdb文件生成或者aof文件寫入。
?bgsave完成後我們執行updateSlavesWaitingBgsave來實現rdb數據的同步。
? 在updateSlavesWaitingBgsave過程中我們把和slave連接的socket註冊寫事件到eventLoop當中且回調函數為sendBulkToSlave,通過該回調函數實現rdb文件的傳輸。
? 可以看出來整個同步過程中我們會同步master到所有的slave節點,註意是所有的slave節點。
? sendBulkToSlave內部主要實現兩個事情,都是和數據傳輸有關: