redis持久化和復制原理
Redis提供了兩種不同的持久化方式:
RDB:在指定的時間間隔內生成數據快照,以二進制進行存儲
AOF:記錄服務器執行的所有寫操作命令,並在服務器啟動時,通過重新執行這些命令來還原數據集新命令會被追加到文件的末尾,每隔一段時間在後臺對AOF文件進行重寫使AOF文件的體積不會超出保存數據所需實際大小
Redis還可以同時使用AOF和RDB,在這種情況下,當Redis重啟後,它會優先使用AOF文進行數據還原,因為AOF文件保存的數據通常比RDB保存的數據更完整,通常AOF和RDB協同工作,在一定程度上彌補了他們的缺點
RDB的優缺點:
優點:
1、文件緊湊,它保存了Redis在某個時間點上的數據集,非常適合用於進行備份
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持久化和復制原理