Redis 之 備份

RDB(快照備份)

RDB快照過程:

RDB文件內容緊湊,文件小(比AOF文件小)非常適合於災難恢復
  • 1、Redis使用fork函數複製一份當前的父進程作爲子進程
  • 2、父進程繼續處理用戶的請求,子進程開始把內存中的數據持久化到磁盤上
  • 3、當子進程把內存中的數據寫入到臨時文件完成之後,會把該臨時文件替換掉舊的RDB文件。
功能核心函數rdbSave(生成RDB文件)和rdbLoad(從文件加載內存)兩個函數

在這裏插入圖片描述

快照方式

允許你每隔一段時間對內存數據做一次快照然後存儲到硬盤中。

目錄和文件名

RDB持久化到磁盤的文件默認路徑是在當前目錄,文件名爲dump.rdb,你可以通過配置文件配置dir和dbfilename來指定文件目錄和文件名稱,RDB文件還可以進行壓縮,你可以通過配置rdbcompression參數來進行壓縮

優點:

適合大規模數據恢復,對數據完整性不高

缺點:

在間隔時間內宕機,數據丟失;fork進程會佔用一定內存空間。

觸發機制:

  • 1.save規則滿足會觸發rdb規則
  • 2.執行flushall命令
  • 3.退出redis也產生dump.rdb文件

AOF(命令備份)

保存所有的寫命令到文件

同步過程:

  • 1、Redis 執行 fork() ,現在同時擁有父進程和子進程。
  • 2、子進程開始將新 AOF 文件的內容寫入到臨時文件。
  • 3、對於所有新執行的寫入命令,父進程一邊將它們累積到一個內存緩存中,一邊將這些改動追加到現有 AOF 文件的末尾: 這樣即使在重寫的中途發生停機,現有的 AOF 文件也還是安全的。
  • 4、當子進程完成重寫工作時,它給父進程發送一個信號,父進程在接收到信號之後,將內存緩存中的所有數據追加到新 AOF 文件的末尾。
  • 5、搞定!現在 Redis 原子地用新文件替換舊文件,之後所有命令都會直接追加到新 AOF 文件的末尾
每當執行服務器(定時)任務或者函數時flushAppendOnlyFile 函數都會被調用, 這個函數執行以下兩個工作
aof寫入保存:
WRITE:根據條件,將 aof_buf 中的緩存寫入到 AOF 文件
SAVE:根據條件,調用 fsync 或 fdatasync 函數,將 AOF 文件保存到磁盤中。

在這裏插入圖片描述

目錄和文件名

通過將發送到服務器的寫操作命令記錄下來,形成AOF文件,文件默認名稱是appendonly.aof,可以通過appendfilename來指定文件名稱

AOF在同步內存數據到磁盤上時,並不是馬上把文件寫到磁盤中,而是先把文件緩存到系統,然後每隔30秒將文件寫入到磁盤中

修復文件

如果aof文件有錯誤,redis啓動不了,可以使用bin目錄下的
redis-check-aof --fix appendonly.aof 修復備份文件。

優點:

1.每次修改都同步,完整性更好
2.每秒同步一次,可能丟失數據
3.從不同步,這時操作系統自己同步數據,速度最快,效率最高。

缺點:

1.aof數據文件大於rdb,修復速度慢。
2.aof運行效率遠低於rdb
3.RDB一條數據一條記錄,AOF可能有多條數據

如何開啓(默認不開啓):

修改配置文件中appendonly yes

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