1. 程式人生 > >redis持久化和復制原理

redis持久化和復制原理

redis

Redis提供了兩種不同的持久化方式:

RDB:在指定的時間間隔內生成數據快照,以二進制進行存儲

AOF:記錄服務器執行的所有寫操作命令,並在服務器啟動時,通過重新執行這些命令來還原數據集新命令會被追加到文件的末尾,每隔一段時間在後臺對AOF文件進行重寫使AOF文件的體積不會超出保存數據所需實際大小

Redis還可以同時使用AOF和RDB,在這種情況下,當Redis重啟後,它會優先使用AOF文進行數據還原,因為AOF文件保存的數據通常比RDB保存的數據更完整,通常AOF和RDB協同工作,在一定程度上彌補了他們的缺點

RDB的優缺點:

優點:

1、文件緊湊,它保存了Redis在某個時間點上的數據集,非常適合用於進行備份

2、可以最大化Redis的性能,父進程在保存RDB文件時唯一要做的就是fork出一個子進程,然後這個子進程就會處理接下來的所有持久化工作,父進程無須執行任何磁盤 I/O 操作

3、在恢復數據量比較大時速度比AOF的恢復速度快

缺點:

1、無法實時備份,在服務器出現故障時可能會丟失部分數據

2、由於使用子進程進行數據持久化,當數據比較大的時候可能會占用比較多的cpu資源

3、每一次都是完整備份,而無法實現增量備份

AOF的優缺點:

優點:

1、實時的記錄了redis的寫操作,在服務器出現故障時基本不會造成數據丟失

2、在AOF文件體積過大時,自動地在後臺對AOF進行重寫,重寫後的AOF文件包含了恢復數據所需的最小命令集

3、AOF以Redis協議的格式進行保存,可讀性好,對文件進行分析也很輕松

缺點:

1、AOF文件的體積通常要大於RDB文件的體積

2、AOF的恢復速度通常慢於RDB


AOF文件的重寫過程:

AOF文件體積在達到一定程度時會在後臺啟動AOF文件重寫功能通過fork打開一個子進程,這個進程器讀取整個redis的數據內容,將他生成一個新的AOF文件,在AOF文件重寫是產生的寫操作記錄兩份,一份直接寫入的舊的AOF文件中,一份放入緩存區,當AOF文件重寫完成之後替換掉舊的AOF文件並將緩存區的寫操作追加到新的AOF文件中

復制特點:

1、Redis使用異步非阻塞進行復制

2、一主可以有多從,從服務器也可以有從服務器

3、可以通過復制讓主服務器免於不用持久化,由從服務器去執行持久化操作(不建議這麽使用)

復制過程:

1、slave向主服務器發起同步請求

2、master執行bgsave生成鏡像文件,在這個過程中產生的新數據會存入緩存區,當bgsave執行完畢後生成一個.rbd文件,master將.rbd文件和緩存區的數據發送給slave,slave收到master的數據後將這些數據存入本地硬盤,slave從本地硬盤中載入數據到內存

3、即使有多個slave同時向主服務器發送同步請求,master也只需執行一次bgsave


本文出自 “自動化運維” 博客,請務必保留此出處http://hongchen99.blog.51cto.com/12534281/1927939

redis持久化和復制原理