目錄
- 1、背景
- 2、工作原理
- 3、核心配置參數
- 4、優缺點
- 5、AOF文件內容
1、背景
AOF(Append Only File)是redis提供的持久化機制之一,它通過記錄所有修改數據庫狀態的寫命令來實現數據庫持久化。與RDB(快照)方式不同,AOF記錄的是操作過程而非數據狀態。
2、工作原理
AOF的工作原理如下:
1、命令記錄:當AOF開啟時,redis會將每個寫命令追加到AOF緩沖區
2、文件同步:根據配置策略將緩沖去內容寫入AOF文件
3、文件重寫:定期執行AOF重寫以壓縮文件大小
3、核心配置參數
AOF在redis.conf的相關配置如下:
[root@xxx]# cat /xxx/redis.conf | grep -E 'append|auto-aof'
appendonly yes #啟用AOF持久化
appendfilename "xxx" #AOF文件名,沒配置默認文件名為appendonly.aof
appendfsync everysec #同步策略
no-appendfsync-on-rewrite yes #控制AOF重寫期間是否執行主進程的fsync同步操作
auto-aof-rewrite-percentage 300 #觸發重寫的增長比例
auto-aof-rewrite-min-size 1G #觸發重寫的最小文件大小
同步策略(appendfsync )有三種:
1、always:每個寫命令都同步到磁盤,最安全但性能最低
2、everysec(默認):每秒同步一次,平衡安全性和性能
3、no:由操作系統決定同步時機,性能最好但是可能丟失數據
需要注意no-appendfsync-on-rewrite這個配置的作用機制:
<1>當設置為yes時
1、在AOF重寫期間,主進程不會調用fsync來同步AOF文件 2、即使配置了appendfsync 也會被暫時忽略 3、可以顯著提供重寫期間的性能,減少I/O阻塞
<2>當設置為no時
1、在AOF重寫期間,主進程仍會按照配置的appendfsync策略同步AOF文件 2、保證更高的數據安全性,但可能會影響重寫性能
4、優缺點
AOF的優缺點如下:
優點 | 缺點 |
---|---|
數據安全性高:可配置不同級別的同步策略(always/everysec/no) | 文件體積大:記錄所有寫命令,長期運行后文件可能遠大于RDB |
可讀性強:AOF文件是純文本格式,便于人工檢查或修復 | 恢復速度慢:重啟時需要重新執行所有命令,比RDB加載慢 |
容錯性好:即使文件部分損壞,仍可通過redis-check-aof工具修復 | 寫入性能開銷:相比RDB,AOF通常有更高的寫入負載(取決于同步策略) |
實時性高:默認每秒同步,最多丟失1秒數據 | 重寫期間可能阻塞:AOF重寫時(尤其是大實例)可能短暫影響性能 |
操作粒度細:記錄每個寫命令,可精確到命令級別恢復 | 歷史兼容性問題:不同redis版本的AOF格式可能有細微差異 |
支持混合持久化(redis 4.0+):結合RDB和AOF優勢 | 配置復雜度高:需合理設置同步策略,重寫觸發條件等參數 |
5、AOF文件內容
客戶端連接redis執行如下命令:
[root@xxx]# /xxx/redis-cli -h 127.0.0.1 -p 6379 -a xxx
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:16379> select 2 #使用2號庫
OK
127.0.0.1:16379[2]> set XXX YYY #設置key=XXX,value=YYY
OK
AOF文件輸出如下:
[root@xxx]# tail -f /xxx/appendonly.aof
*2 #表示這部分操作有2個部分
$6 #表示SELECT命令有6個字節
SELECT
$1 #表示使用的2號數據庫這個2有1個字節
2
*3 #表示這部分操作有3個部分
$3 #表示set命令有3個字節
set
$3 #表示設置的鍵XXX有3個字節
XXX
$3
YYY #表示設置的值YYY有3個字節