主從架構的核心原理node
當啓動一個slave node的時候, 他會發送一個PSYNC命令給master node, 若是這時從新鏈接master node, 那麼master node僅僅會複製給slave部分缺乏的數據; 不然若是是salve node, 那麼會觸發一次full resynchronization開始進行全量的複製, 此時的master會在後臺啓動一個進程, 生成一份rdb文件, 同時還會降從客戶端收到的命令緩存在內存中, rdb文件生成完畢以後, master會將這個rdb發送給slave, slave會先寫入本地磁盤, 而後再從本地磁盤加載到內存, 而後master會將內存中緩存的寫命令發送給slave, slave也會同步這些數據.
主從複製的斷點續傳redis
從redis 2.8開始, 就支持主從複製的斷點續傳, 若是主從複製過程當中, 網絡鏈接斷掉了, 那麼能夠接着場次複製的地方, 繼續複製下去, 而不是從頭開始複製一份master node會在內存中建立一個backlog, master和slave都會保存一個replica offset還有一個master id, offset就是保存在, offset就是保存在backlog中的, 若是master和lave網絡鏈接斷掉了, slave會讓master從上次的replica offset開始繼續複製可是若是沒有找到對應的offset, 那麼就會執行一次resynchronization.
無磁盤化複製緩存
master在內存中直接建立rdb, 而後發送給slave, 不會在本身本地的磁盤中存儲 repi-diskless-sync repi-diskless-sync-delay 等待必定市場再開始複製, 由於要等更多slave從新鏈接過來
過時key處理網絡
slave不會過時key, 只會等待master過時key, 若是master過時了一個key, 或者經過LRU淘汰了一個key, 那麼會模擬一條del命令發送給slave