一、需要了解的基礎
1、Redis實現數據持久化的兩種實現方式:
RDB:指定的時間間隔內保存數據快照
AOF:先把命令追加到操作日志的尾部,保存所有的歷史操作
二、RDB 實現 Redis數據持久化(默認方式)
1、編輯 redis.conf
注:使用whereis redis命令查看redis安裝在哪個位置,然后進入redis安裝目錄的etc目錄下,編輯redis.conf。
2、默認備份的時間間隔
3、默認備份的文件名稱
4、默認備份的RDB文件位置
5、像這樣,就是其中的備份文件
6、當然,也可以主動觸發保存redis數據快照,操作如下
注:當然,如果是線上的redis要主動備份,建議使用bgsave命令,更多關于RDB的原理和使用?
http://www.chenxm.cc/post/526.html?segmentfault
7、缺點:
因為是特定條件下進行一次持久化(每隔一段時間),就可能會導致一旦redis崩潰,再次回復時,可能會導致部分數據丟失。
注:如果設置的備份時間間隔較短,比較耗服務器性能,如果設置的備份時間間隔較長,又可能會導致數據恢復時部分數據丟失。
三、AOF持久化方案
先把命令追加到操作日志的尾部,保存所有的歷史操作。
1、相比于RDB持久化方案的優點:
(1)數據非常完整,故障恢復丟失數據少
(2)可對歷史操作進行處理
2、如何開啟AOF持久化模式
將redis.conf 配置文件中的appendonly 參數改為yes 后,則redis開始啟動AOF數據持久化模式
設置AOF同步的方式,這里設置的默認的每秒同步一次
3、開啟AOF同步模式后,備份文件是這樣的
從上面可以看出,它記錄了從我開啟AOF后的所有操作命令
4、缺點
(1)因為AOF模式要把每一步redis命令都記錄下來,所以就導致文件的體積會很大
(2)而且會導致速度低于RDB,并且恢復速度慢
四、RDB模式和AOF模式的恢復
Redis崩潰后,重啟redis會自動找備份恢復文件,下圖大致描述了redis重啟后的過程。
總結:
在實際應用中,根據場景不同,選擇的方式也不盡相同,各有優缺點。但我個人看法,RDB的快照方式相比于AOF的逐步記錄模式要好一些。至于RDB丟數據的風險,我們完全可以通過控制備份的時間間隔來避免這個問題。當然,也是可以兩種方式同時使用的,只是大多不會這么做。