Redis 的持久化底層如何實現的和優點缺點

RDB(Redis DataBase:在不同的時間點將 redis 的數據生成的快照同步到磁盤等介質上):內存
到硬盤的快照,定期更新。

缺點:耗時,耗性能(fork+io 操作),易丟失數據。

AOF(Append Only File:將 redis 所執行過的所有指令都記錄下來,在下次 redis 重啟時,只需要執行指令就可以了):寫日誌。

缺點:體積大,恢復速度慢。bgsave 做鏡像全量持久化, aof 做增量持久化。因為 bgsave 會消耗比較長的時間,不夠實時,在停機的時候會導致大量的數據丟失,需要 aof 來配合,在 redis 實例重啟時,優先使用 aof 來恢復內存的狀態,如果沒有 aof 日誌,就會使用 rdb 文件來恢復。 Redis 會定期做aof 重寫,壓縮 aof 文件日誌大小。

Redis4.0 之後有了混合持久化的功能,將 bgsave 的全量和 aof 的增量做了融合處理,這樣既保證了恢復的效率又兼顧了數據的安全性。 bgsave 的原理, fork 和 cow, fork 是指 redis 通過創建子進程來進行 bgsave 操作, cow 指的是 copy on write,子進程創建後,父子進程共享數據段,父進程繼續提供讀寫服務,寫髒的頁面數據會逐漸和子進程分離開來。


分享到:


相關文章: