2023.5.31編輯入挣, 該篇文章主要用于記錄自己碎片化學習的資料
RDB
在進行 RDB 的時候,redis 的主線程是不會做 io 操作的,主線程會 fork 一個子線程來完成該操作雹顺;
1. Redis 調(diào)用forks。同時擁有父進程和子進程廊遍。
2. 子進程將數(shù)據(jù)集寫入到一個臨時 RDB 文件中。
3. 當子進程完成對新 RDB 文件的寫入時贩挣,Redis 用新 RDB 文件替換原來的 RDB 文件喉前,并刪除舊的 RDB 文件。
這種工作方式使得 Redis 可以從寫時復制(copy-on-write)機制中獲益(因為是使用子進程進行寫操作王财,而父進程依然可以接收來自客戶端的請求卵迂。)
AOF
將所有的命令都記錄下來,恢復的時候就把這個文件全部都執(zhí)行一遍
以日志的形式來記錄每個寫的操作绒净,將Redis執(zhí)行過的所有指令記錄下來(讀操作不記錄)见咒,只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構(gòu)建數(shù)據(jù)挂疆,換言之改览,redis重啟的話就根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復工作。
Aof默認保存的是appendonly.aof文件缤言,且默認不開啟宝当,可以在redis.conf中修改
若AOF文件有錯位, 這時候 redis 文件無法啟動胆萧。這時庆揩,則需要進行文件的修復〉耄可以使用Redis提供的redis-check-aof工具
進行修復, 對應的指令為redis-check-aof --fix filename