redis 持久化

redis 的持久化有兩種方式:rdb全量持久化和aof增量持久化;redis

AOF優先級更高,在AOF開啓狀態下,且存在AOF文件,優先使用AOF恢復數據 ;數據庫


RDB


命令

  • save 在主進程中執行任務,會阻塞服務器
  • bgsave 在子進程中執行任務,非阻塞

生成

  • 手動執行命令
  • 配置文件,save後的數字表示多少秒內對數據庫進行了幾回修改:
    • save 900 1
    • save 300 10
    • save 60 10000

載入

服務器啓動時,若未開啓AOF持久化,則自動加載rdb文件進行數據恢復;服務器


AOF - Append Only File


配置

經過配置文件中的配置項進行開啓AOF功能:app

  • appendonly yes ## 開啓aof持久化
  • appendfilename "aofname.aof" ## aof文件的文件名
  • appendfsync everysec ## 每一個事件循環中,是否將aof緩衝區中的內容寫入並同步到aof文件,選項見下文

實現原理:

  • 命令追加: 服務器執行完寫命令後,會以協議格式將命令追加到服務器狀態的aof_buf緩衝區;
  • 文件寫入: redis事件循環中,每次處理完IO事件和時間事件後,會考慮是否要將aof_buf中的內容寫入到aof文件中,該行爲由 appendfsync配置選項控制
    • always 每一個事件循環都會將aof_buf中的內容寫入並同步到aof文件
    • everysec 將aof_buf中的內容寫入文件,並判斷上次同步的時間,超過一秒(默認)就同步
    • no 將aof_buf中的內容寫入到文件,什麼時候同步由操做系統決定
  • 文件同步

AOF 重寫

由於aof文件中記錄的是全部寫命令,所以數據頻繁變化時冗餘較大,爲解決此問題,引入aof重寫功能;操作系統

:aof重寫並不分析aof文件,而是依據當前的數據快照生成寫命令,替換掉原來的aof文件;code

aof由子進程在後臺重寫,帶來新的問題,在重寫期間產生的新的寫命令,會形成數據庫與aof文件中的數據不一致;爲此,redis 設置了一個aof重寫緩衝區,這個緩衝區在建立執行重寫任務的子進程後啓用,當redis執行完命令,會同時記錄到aof緩衝區和aof重寫緩衝區;進程

相關文章
相關標籤/搜索