RDB
- RDB持久化的功能指把當(dāng)前Redis在內(nèi)存中的狀態(tài)保存到磁盤上芭毙,RDB文件是一個壓縮過的二進(jìn)制文件
- SAVE和BGSAVE命令可以生成RDB文件酌壕,SAVE會阻塞Redis服務(wù)器進(jìn)程來生成文件,BGSAVE則會派生出一個子進(jìn)程來生成RDB文件厕氨,這倆個命令不能同時執(zhí)行
- Redis服務(wù)器在啟動時會自動載入RDB文件來更新內(nèi)存中數(shù)據(jù)庫狀態(tài)咐熙,但是如果服務(wù)器開啟了AOF持久化功能捐名,會優(yōu)先使用AOF來更新,因為AOF更新頻率比RDB更快谜嫉,數(shù)據(jù)庫更新
- Redis服務(wù)器根據(jù)save選項設(shè)置的保存條件來自動執(zhí)行BGSAVE命令
save 300 10
save 60 10000
表示服務(wù)器在300秒之內(nèi)對數(shù)據(jù)庫進(jìn)行了10次修改或者60秒內(nèi)對數(shù)據(jù)庫進(jìn)行了10000次修改就進(jìn)行BGSAVE
AOF
- AOF通過記錄Redis服務(wù)器執(zhí)行的寫命令來記錄數(shù)據(jù)庫狀態(tài)萎坷,AOF文件中除了執(zhí)行數(shù)據(jù)庫的SELECT是自動添加的,其他命令都是客戶端發(fā)送的
- AOF持久化可分為:命令追加沐兰、文件寫入哆档、文件同步
-- 當(dāng)一個寫命令被服務(wù)器執(zhí)行結(jié)束時,會以協(xié)議格式把寫命令追加到aof_buf緩沖區(qū)
-- Redis服務(wù)器進(jìn)程是一個事件循環(huán)住闯,服務(wù)器每結(jié)束一個事件循環(huán)都會調(diào)用
文件寫入和文件同步區(qū)別:
AOF文件載入和還原數(shù)據(jù)庫
由于Redis命令只能在客戶端執(zhí)行,所以服務(wù)器會起一個無網(wǎng)絡(luò)連接的偽客戶端來執(zhí)行AOF文件中的命令
AOF重寫
- 由于AOF文件是記錄數(shù)據(jù)庫的寫命令比原,時間久了插佛,AOF文件會很大,需要重寫(AOF 重寫由 Redis 自行觸發(fā)量窘,BGREWRITEAOF 僅僅用于手動觸發(fā)重寫操作)來減少文件體積雇寇;
。
- 為了在重寫過程中蚌铜,Redis服務(wù)器進(jìn)程還可以響應(yīng)請求锨侯,通過使用子進(jìn)程來進(jìn)行AOF重寫:子進(jìn)程保留了服務(wù)器進(jìn)程的數(shù)據(jù)副本,使用子進(jìn)程而不是子線程冬殃,可以保證在不使用鎖的前提下保證數(shù)據(jù)的安全性
-- 為了防止在重寫時丟失命令囚痴,Redis服務(wù)器設(shè)置了一個AOF重寫緩沖區(qū),在重寫開始時审葬,把之后到重寫完成時服務(wù)器接受的寫指令同時發(fā)給AOF緩沖區(qū)和AOF重寫緩沖區(qū)深滚,子進(jìn)程完成重寫后骂束,把重寫緩沖區(qū)數(shù)據(jù)追加到新AOF文件中,在原子替換原有的AOF文件成箫,就完成了AOF文件重寫了展箱。
BGSAVE、SAVE蹬昌、BGREWRITEAOF之間不能同時執(zhí)行