你對 Redis 的持久化機制瞭解嗎?

Redis 爲了保證效率,數據緩存在了內存中,但是會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件中,以保證數據的持久化。

Redis 的持久化策略有兩種:

RDB:快照形式是直接把內存中的數據保存到一個 dump 的文件中,定時保存,保存策略。
AOF:把所有的對 Redis 的服務器進行修改的命令都存到一個文件裏,命令的集合。
Redis 默認是快照RDB 的持久化方式。

當 Redis 重啓的時候,它會優先使用 AOF 文件來還原數據集,因爲 AOF 文件保存的數據集通常比 RDB 文件所保存的數據集更完整。你甚至可以關閉持久化功能,讓數據只在服務器運行時存。

RDB 是怎麼工作的?
默認 Redis 是會以快照"RDB"的形式將數據持久化到磁盤的一個二進制文件 dump.rdb。
工作原理簡單說一下:當 Redis 需要做持久化時,Redis 會 fork 一個子進程,子進程將數據寫到磁盤上一個臨時 RDB 文件中。
當子進程完成寫臨時文件後,將原來的 RDB 替換掉,這樣的好處是可以 copy-on-write。

RDB 的優點是:這種文件非常適合用於備份:比如,你可以在最近的 24 小時內,每小時備份一次,並且在每個月的每一天也備份一個 RDB 文件。
這樣的話,即使遇上問題,也可以隨時將數據集還原到不同的版本。RDB 非常適合災難恢復。
RDB 的缺點是:如果你需要儘量避免在服務器故障時丟失數據,那麼RDB不合適你。

AOF是怎麼工作的?
(說就一起說下吧)使用 AOF 做持久化,每一個寫命令都通過 write 函數追加到 appendonly.aof 中,配置方式如下:
appendfsyncyesappendfsync always #每次有數據修改發生時都會寫入AOF文件。appendfsync everysec #每秒鐘同步一次,該策略爲AOF的缺省策略。

AOF 可以做到全程持久化,只需要在配置中開啓 appendonly yes。這樣 Redis 每執行一個修改數據的命令,都會把它添加到 AOF 文件中,當 Redis 重啓時,將會讀取 AOF 文件進行重放,恢復到 Redis 關閉前的最後時刻。

使用 AOF 的優點是會讓 Redis 變得非常耐久。可以設置不同的 Fsync 策略,AOF的默認策略是每秒鐘 Fsync 一次,在這種配置下,就算髮生故障停機,也最多丟失一秒鐘的數據。

缺點是對於相同的數據集來說,AOF 的文件體積通常要大於 RDB 文件的體積。根據所使用的 Fsync 策略,AOF 的速度可能會慢於 RDB。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章