RDB快照
觸發機制:
- save同步會阻塞
- bsave異步,fork主線程的子線程,中間生成臨時rdb文件最後生成正式的rdb文件
- 自動
最佳配置
dbfilename dump-${port}.rdb
dir /bigdiskpath
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
其它觸發方式:全量複製,debug reload ,shutdown
AOF(append only file)
以獨立日誌的方式記錄每次寫命令,重啓時再重新執行AOF文件中的命令達到恢復數據的目的。AOF持久化開啓且存在AOF文件時,優先加載AOF文件。
開啓AOF功能需要設置配置
appendonly yes,默認不開啓。AOF文件名通過appendfilename配置設置,默認文件名是appendonly.aof。保存路徑同RDB持久化方式一致,通過dir配置指定。AOF的工作流程操作:命令寫入(append)、文件同步(sync)、文件重寫(rewrite)、重啓加載(load)。
AOF爲什麼把命令追加到sof_buf中?
Redis使用單線程響應命令,如果每次寫AOF文件命令都直接追加到硬盤,那麼性能完全取決於當前硬盤負載。先寫入緩衝區aof_buf中,還有另一個好處,Reids可以提供多種緩衝區同步硬盤的策略,在性能和安全性方面做出平衡。
文件同步
appendfsync always #每次有數據修改發生時都會寫入AOF文件。
appendfsync everysec #每秒鐘同步一次,該策略爲AOF的缺省策略。
appendfsync no #從不同步。高效但是數據不會被持久化。由操作系統決定
重寫機制
AOF文件重寫是把Redis進程內的當前數據轉化爲寫命令同步到新AOF文件的過程。優化過時的,無效的,重複的命令。
AOF重寫過程可以手動觸發和自動觸發:
-
手動觸發:直接調用bgrewriteaof命令。
-
自動觸發:根據auto-aof-rewrite-min-size和auto-aof-rewrite-percentage參數確定自動觸發時機。
-
auto-aof-rewrite-min-size:表示運行AOF重寫時文件最小體積,默認爲64MB。
-
auto-aof-rewrite-percentage:代表當前AOF文件空間(aof_current_size)和上一次重寫後AOF文件空間(aof_base_size)的比值。
-
自動觸發機制 = aof_current_size > auto-aof-rewrite-min-size && (aof_current_size - aof_base_size) / aof_base_size >= auto-aof-rewrite=percentage
RDB與AOF的對比