Redis主從節點在資料同步階段,主節點會根據目前狀态的不同執行的不同複制操作,包括全量複制和部分複制。
- 全量複制:用于首次複制或者其他不能進行部分複制的情況。全量複制是一個非常重的操作,一般我們都要規避它。
- 部分複制:用于從節點短暫中斷的情況(網絡中斷、短暫的服務當機)。部分複制是一個非常輕量級的操作,因為它隻需要将中斷期間的指令同步給從節點即可,相比于全量複制,它顯得更加高效。
Redis 2.8 以前,從節點向主節點發送 sync 指令請求同步資料,此種方式是全量複制。在 Redis 2.8 以後,Redis 支援部分複制,發送的指令是 psync。
全量複制場景:第一次建立連接配接進行資料同步是全量複制,還有以下幾種情況也是全量複制:
1. 第一次建立連接配接進行資料同步是全量複制。
2. 從節點發送 psync {runid} {offset} 時,runid 與目前主節點的 runid 不比對則進行全量複制。
3. 從節點所需要同步資料的偏移量 offset 不在複制積壓緩沖區中,也會進行全量複制。
部分複制場景:
1. 從節點發送 psync {runid} {offset} 時,如請求的偏移量在複制積壓緩沖區中,則主節點就将剩餘的資料補發給從節點,保持主從節點資料一緻。