
資料內(nèi)容:
AOF(append-only file) 
快照功能并不是非常耐久(durable): 如果 Redis 因為某些原因而造成故障停機, 那么服務(wù)器將丟失 
最近寫入、且仍未保存到快照中的那些數(shù)據(jù)。從 1.1 版本開始, Redis 增加了一種完全耐久的持久化方 
式: AOF 持久化,將修改的每一條指令記錄進文件appendonly.aof中(先寫入os cache,每隔一段時間 
fsync到磁盤) 
比如執(zhí)行命令“set zhuge 666”,aof文件里會記錄如下數(shù)據(jù) 
1 *32 $3 
3 set 
4 $5 
5 zhuge 
6 $3 
7 666 
這是一種resp協(xié)議格式數(shù)據(jù),星號后面的數(shù)字代表命令有多少個參數(shù),$號后面的數(shù)字代表這個參數(shù)有幾 
個字符 
注意,如果執(zhí)行帶過期時間的set命令,aof文件里記錄的是并不是執(zhí)行的原始命令,而是記錄key過期的 
時間戳 
比如執(zhí)行“set tuling 888 ex 1000”,對應aof文件里記錄如下 
1 *3 
2 $3 
3 set 
4 $6 
5 tuling 
6 $3 
7 888 
8 *3 
9 $9 
10 PEXPIREAT 
11 $6 
12 tuling 
13 $13 
14 1604249786301 
你可以通過修改配置文件來打開 AOF 功能: 
1 # appendonly yes 
從現(xiàn)在開始, 每當 Redis 執(zhí)行一個改變數(shù)據(jù)集的命令時(比如 SET), 這個命令就會被追加到 AOF 文 
件的末尾。 
這樣的話, 當 Redis 重新啟動時, 程序就可以通過重新執(zhí)行 AOF 文件中的命令來達到重建數(shù)據(jù)集的目 
的。 
你可以配置 Redis 多久才將數(shù)據(jù) fsync 到磁盤一次。 
有三個選項: 
1 appendfsync always:每次有新命令追加到 AOF 文件時就執(zhí)行一次 fsync ,非常慢,也非常安全。 
2 appendfsync everysec:每秒 fsync 一次,足夠快,并且在故障時只會丟失 1 秒鐘的數(shù)據(jù)。 
3 appendfsync no:從不 fsync ,將數(shù)據(jù)交給操作系統(tǒng)來處理。更快,也更不安全的選擇。 
推薦(并且也是默認)的措施為每秒 fsync 一次, 這種 fsync 策略可以兼顧速度和安全性。 
AOF重寫 
AOF文件里可能有太多沒用指令,所以AOF會定期根據(jù)內(nèi)存的最新數(shù)據(jù)生成aof文件 
例如,執(zhí)行了如下幾條命令: 
1 127.0.0.1:6379> incr readcount 
2 (integer) 13 127.0.0.1:6379> incr readcount 
4 (integer) 2 
5 127.0.0.1:6379> incr readcount 
6 (integer) 3 
7 127.0.0.1:6379> incr readcount 
8 (integer) 4 
9 127.0.0.1:6379> incr readcount 
10 (integer) 5 
重寫后AOF文件里變成 
1 *3 
2 $3 
3 SET 
4 $2 
5 readcount 
6 $1 
7 5 
 
                