Redis持久化存儲 RDB、AOF

RDB:當Redis保存dump.rdb文件時,Redis server執行以下操作

  • Redis調用focks(),此時擁有父進程和子進程
  • 利用子進程將數據寫入(IO)一個臨時rdb文件中
  • 當子進程完成寫入後,redis會用新rdb文件替代舊的,並刪除舊rdb文件

缺點

  • 數據容易丟失(數據完整性)
  • 當寫入的數據量較大時,不能夠及時響應客戶端的請求

AOF 重寫和 RDB 創建快照一樣,都巧妙地利用了寫時複製機制:

  • Redis 執行 fork() ,現在同時擁有父進程和子進程。
  • 子進程開始將新 AOF 文件的內容寫入到臨時文件。
  • 對於所有新執行的寫入命令,父進程一邊將它們累積到一個內存緩存中,一邊將這些改動追加到現有 AOF 文件的末尾,這樣樣即使在重寫的中途發生停機,現有的 AOF 文件也還是安全的。
  • 當子進程完成重寫工作時,它給父進程發送一個信號,父進程在接收到信號之後,將內存緩存中的所有數據追加到新 AOF 文件的末尾。
  • 現在 Redis 原子地用新文件替換舊文件,之後所有命令都會直接追加到新 AOF 文件的末尾。

待更新…

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