1. RDB(redis database)
1.1 含義
在指定的時間間隔里,將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤;在恢復(fù)時直接將快照數(shù)據(jù)讀到內(nèi)存
1.2 實現(xiàn)流程
1、redis 服務(wù)端開啟一個子線程
2、子進(jìn)程將數(shù)據(jù)集寫入到一個臨時RDB文件中(dump.rdb)
3、子進(jìn)程完成對一個新的RDB文件寫入時,替換調(diào)舊的RDB文件
1.3 優(yōu)點
1、適合做某一時間點的數(shù)據(jù)備份,將數(shù)據(jù)還原到不同的版本
2、在恢復(fù)大數(shù)據(jù)量時速度快過AOF
3、最大化redis性能,不影響客戶端的請求
1.4 缺點
1、服務(wù)器故障時數(shù)據(jù)丟失,保存數(shù)據(jù)集是一個耗時操作
1.5 備份方式
1. redis.conf 文件中配置觸發(fā)條件
save 900 1
save 300 10
save 60 10000
# n m
N 秒內(nèi)數(shù)據(jù)集至少有 M 個改動,觸發(fā)一次數(shù)據(jù)集保存
2、BGSAVE,手動備份
在后臺異步保存當(dāng)前數(shù)據(jù)到磁盤
127.0.0.1:6379> BGSAVE
Background saving started
# 最近一次 Redis 成功將數(shù)據(jù)保存到磁盤上的時間
127.0.0.1:6379> LASTSAVE
(integer) 1616657937
2. AOF(append only file)
2.1 含義
以日志的方式記錄redis每一次寫的操作,已追加的方式寫入文件(appendonly.aof),類似于mysql的binlog日志;
再重新啟動redis服務(wù)時,執(zhí)行該文件中的命令
2.2 開啟方式
redis.conf 配置:
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always 實時同步
appendfsync everysec 每秒同步
# appendfsync no 不同步
2.3 重寫機(jī)制
目的:
不斷的將命令追加到文件末尾,導(dǎo)致文件過大,大量冗余命令可以優(yōu)化,比如incr key等
只保留可以恢復(fù)數(shù)據(jù)的最小指令集,提升效率,節(jié)省磁盤空間
原理:
不操作舊的aof文件,子進(jìn)程遍歷內(nèi)存中的數(shù)據(jù),根據(jù)數(shù)據(jù)內(nèi)容生成命令重新寫一個aof文件
觸發(fā)重寫時機(jī):
redis會記錄上一此重寫后文件的大小,當(dāng)AOF文件大小是上一次的一倍并且大于64m時,會觸發(fā)從寫機(jī)制
在redis.conf 中配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
手動重寫:
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
重寫流程:
1、redis 通過fork(),生成一個子進(jìn)程
2、子進(jìn)程根據(jù)內(nèi)存數(shù)據(jù)重新生成命令,寫入到一個新的aof文件中,
3、父進(jìn)程將所有新執(zhí)行的寫的命令,加到內(nèi)存緩存,將這些改動追加到現(xiàn)有 AOF 文件的末尾
4、當(dāng)子進(jìn)程完成重寫工作時,它給父進(jìn)程發(fā)送一個信號,父進(jìn)程在接收到信號之后,將內(nèi)存緩存中的所有數(shù)據(jù)追加到新 AOF 文件的末尾
5、新文件代替舊文件,后面新的寫入命令寫到新文件中
2.4 優(yōu)點
1、較為完整的保存了所有寫入命令,保證了數(shù)據(jù)的完整性
2、AOF文件重寫,生成恢復(fù)數(shù)據(jù)的最小指令集
3、aof文件易讀,易分析,純追加操作,不影響原有命令數(shù)據(jù)
2.5 缺點
1、大量寫入操作時,持久化策略影響性能
2、AOF文件占用空間較大
3、AOF文件損壞(事務(wù)執(zhí)行中,服務(wù)掛了)
2.6 AOF文件修復(fù)
[root@iZuf6fy2kg5mx828krkhcuZ src]# redis-check-aof --fix /qqc_data/redis-2.8.17/appendonly.aof
AOF analyzed: size=3865, ok_up_to=3865, diff=0
AOF is valid
3. 如何選擇
兩種方式都開啟,根據(jù)實際場景選擇使用
可以承受分鐘內(nèi)部分?jǐn)?shù)據(jù)丟失,需要更快恢復(fù),用RDB;
保證恢復(fù)數(shù)據(jù)的完整性,應(yīng)AOF;
參考:http://redisdoc.com/topic/persistence.html