redis4.0相對與3.X版本其中一個比較大的變化是4.0添加了新的混合持久化方式。前面已經(jīng)詳細介紹了AOF持久化以及RDB持久化,這里介紹的混合持久化就是同時結合RDB持久化以及AOF持久化混合寫入AOF文件煮剧。這樣做的好處是可以結合 rdb 和 aof 的優(yōu)點, 快速加載同時避免丟失過多的數(shù)據(jù)鹦赎,缺點是 aof 里面的 rdb 部分就是壓縮格式不再是 aof 格式,可讀性差猾瘸。
開啟混合持久化
4.0版本的混合持久化默認關閉的界赔,通過aof-use-rdb-preamble配置參數(shù)控制丢习,yes則表示開啟,no表示禁用淮悼,默認是禁用的咐低,可通過config set修改。
混合持久化過程
了解了AOF持久化過程和RDB持久化過程以后袜腥,混合持久化過程就相對簡單了见擦。
混合持久化同樣也是通過bgrewriteaof完成的,不同的是當開啟混合持久化時羹令,fork出的子進程先將共享的內存副本全量的以RDB方式寫入aof文件鲤屡,然后在將重寫緩沖區(qū)的增量命令以AOF方式寫入到文件,寫入完成后通知主進程更新統(tǒng)計信息福侈,并將新的含有RDB格式和AOF格式的AOF文件替換舊的的AOF文件酒来。簡單的說:新的AOF文件前半段是RDB格式的全量數(shù)據(jù)后半段是AOF格式的增量數(shù)據(jù),如下圖:
數(shù)據(jù)恢復
當我們開啟了混合持久化時肪凛,啟動redis依然優(yōu)先加載aof文件役首,aof文件加載可能有兩種情況如下:
aof文件開頭是rdb的格式, 先加載 rdb內容再加載剩余的 aof。
aof文件開頭不是rdb的格式显拜,直接以aof格式加載整個文件衡奥。
實踐?
?開啟混合持久化,并在開啟后立馬執(zhí)行寫操作远荠,為了證實混合持久化的后半部分AOF過程
查看日志:
此時的aof文件已經(jīng)和只開啟AOF持久化文件不一樣了档址,上半部分是RDB持久化的數(shù)據(jù),下半部分是AOF格式數(shù)據(jù)尼摹。
優(yōu)缺點?
?RDB
優(yōu)點:
RDB?是一個非常緊湊(compact)的文件,體積小惯吕,因此在傳輸速度上比較快废登,因此適合災難恢復。?
RDB?可以最大化Redis?的性能:父進程在保存RDB?文件時唯一要做的就是fork出一個子進程搔体,然后這個子進程就會處理接下來的所有保存工作,父進程無須執(zhí)行任何磁盤I/O?操作。
RDB?在恢復大數(shù)據(jù)集時的速度比AOF?的恢復速度要快梁钾。
缺點:
RDB是一個快照過程,無法完整的保存所以數(shù)據(jù)拇勃,尤其在數(shù)據(jù)量比較大時候蟀架,一旦出現(xiàn)故障丟失的數(shù)據(jù)將更多钩述。
當redis中數(shù)據(jù)集比較大時候所禀,RDB由于RDB方式需要對數(shù)據(jù)進行完成拷貝并生成快照文件恭金,fork的子進程會耗CPU,并且數(shù)據(jù)越大,RDB快照生成會越耗時罗侯。
RDB文件是特定的格式诊县,閱讀性差垂睬,由于格式固定,可能存在不兼容情況。
AOF
優(yōu)點:
數(shù)據(jù)更完整,秒級數(shù)據(jù)丟失(取決于設置fsync策略)菩佑。
兼容性較高,由于是基于redis通訊協(xié)議而形成的命令追加方式混巧,無論何種版本的redis都兼容陨亡,再者aof文件是明文的蛙埂,可閱讀性較好止吁。
缺點:
數(shù)據(jù)文件體積較大,即使有重寫機制盼理,但是在相同的數(shù)據(jù)集情況下畴椰,AOF文件通常比RDB文件大抓艳。
相對RDB方式片任,AOF速度慢于RDB位他,并且在數(shù)據(jù)量大時候泼橘,恢復速度AOF速度也是慢于RDB靡菇。
由于頻繁地將命令同步到文件中厦凤,AOF持久化對性能的影響相對RDB較大违柏,但是對于我們來說是可以接受的博烂。
混合持久化
優(yōu)點:
混合持久化結合了RDB持久化 和 AOF 持久化的優(yōu)點, 由于絕大部分都是RDB格式,加載速度快漱竖,同時結合AOF,增量的數(shù)據(jù)以AOF方式保存了,數(shù)據(jù)更少的丟失。
缺點:
兼容性差,一旦開啟了混合持久化努溃,在4.0之前版本都不識別該aof文件,同時由于前部分是RDB格式哮塞,閱讀性較差
相關命令
aof文件檢查
redis-check-aof /etc/redis/appendonly.aof
rdb文件檢查
redis-check-rdb /etc/redis/dump.rdb
查看持久化信息
info Persistence
查看狀態(tài)信息
info stats