由于redis的數據都存放在內存中,如果沒有配置持久化,redis重啟后數據就全丟失了,于是需要開啟redis的持久化功能,將數據保存到磁 盤上,當redis重啟后,可以從磁盤中恢復數據。
redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時 dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。
RDB:RDB持久化是把當前進程數據生成快照保存到硬盤的過程,觸發RDB持久化過程分為手動觸發和自動觸發。 ? (推薦學習:Redis視頻教程)
觸發機制
手動觸發分別對應save和bgsave命令
save命令:阻塞當前Redis服務器,知道RDB過程完成為止,對于內存比較大的實例會造成長時間阻塞,線上不建議使用。
DB?saved?on?disk
bgseve命令:Redis進程執行fork操作創建子進程,RDB持久化過程有子進程負責,完成后自動結束。阻塞只發生在fork階段,一般時間很短。
*?Background?saving?started?by?pid?3151 *?DB?saved?on?disk *?RDB:?0?MB?of?memory?used?by?copy-on-write *?Background?saving?terminated?with?success
自動觸發
以下場景下會觸發
1)使用save相關配置,如“save m n”。表示m秒內數據集存在n次修改時,自動觸發bgsave。
2)如果從節點執行全量復制操作,主節點自動執行bgsave生成RDB文件并發送給從節點。
3)執行debug reload命令重新加載Redis時,也會自動觸發save操作。
4)默認情況下執行shutdown命令時,如果沒有開啟AOF持久化功能則自動執行bgsave。
AOF:以獨立日志的方式記錄每次寫命令,重啟時在重新執行AOF文件中的命令達到恢復數據的目的。主要作用:解決了數據持久化的實時性。
使用AOF
開啟AOF功能需要設置配置:appendonly yes,默認不開啟。文件名通過appendfilename配置設置,默認appendonly.aof。
1)所有的寫入命令會追加到aof_buf(緩沖區)中。
2)AOF緩沖區根據對應的策略向硬盤做同步操作。
3)隨著AOF文件越來越大,需要定期對AOF文件進行重寫,達到壓縮的目的。
4)當Redis服務器重啟時,可以加載AOF文件進行數據恢復。
更多Redis相關技術文章,請訪問Redis視頻教程欄目進行學習!