Redis是一個內存數據庫,數據保存在內存中。但咱們都知道存儲在內存中的數據會由於外部因素而丟失,因此Redis會把數據持久化到磁盤中,至因而如何持久化呢?redis
根據redis.conf配置裏的save m n定時觸發(用的是BGSAVE)數據庫
主從複製時,主節點自動觸發緩存
執行Debug Relaod服務器
執行Shutdown且沒有開啓AOF持久化網絡
# 在幾秒內改動了多少數據就觸發持久化 # 想禁用的話不設置save 或者save "" save 900 1 save 300 10 save 60 10000 # 備份進程出錯主進程中止寫入操做 stop-writes-on-bgsave-error yes # 是否壓縮rdb文件 推薦no 相對於硬盤成本cpu更值錢 rdbcompression yes
全量備份老是耗時的,有時候咱們提供一種更加高效的方式AOF,工做機制很簡單,redis會將每個收到的寫命令都經過write函數追加到文件中。通俗的理解就是日誌記錄。app
記錄除了查詢之外的全部變動數據庫狀態的指令異步
以append的形式追加保存到AOF文件中(增量)函數
日誌重寫解決AOF文件不斷增大的問題,原理以下性能
調用fork,建立一個子進程測試
子進程把新的AOF寫到一個臨時文件裏,不依賴原來的AOF文件
主進程持續將新的變更同時寫到內存和原來的AOF裏
主進程獲取子進程重寫AOF完成信號,往新AOF同步增量變更
使用新的AOF文件替換掉舊的AOF文件
# 默認關閉若要開啓將no改成yes appendonly no # append文件的名字 appendfilename "appendonly.aof" # AOF文件的寫入方式 # always一旦緩存區內容發生變化就寫入AOF文件中 appendfsync always # everysec 每一個一秒將緩存區內容寫入文件 默認開啓的寫入方式 appendfsync everysec # 將寫入文件的操做交由操做系統決定 appendfsync no # 當AOF文件大小的增加率大於該配置項時自動開啓重寫(這裏指超過原大小的100%)。 auto-aof-rewrite-percentage 100 # 當AOF文件大小大於該配置項時自動開啓重寫 auto-aof-rewrite-min-size 64mb
若是redis沒有升級到4.0,優先選擇 RDB 仍是 AOF 呢?
分析對比兩種方式並作了測試後,發現這是兩種不一樣風格的持久化方式。那麼應該如何選擇呢?