AOF(Append Only File)
將我們的所有命令都記錄下來,相當於history,恢復的時候就吧這個文件全部命令執行一遍!
以日志的形式記錄每個寫操作,將Redis執行過程的所有指令記錄下來,只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis重啟的話就根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。
Aof保存的是 appendonly.aof文件
在redis.windows.conf(windows版)中可查看配置:
默認是不開啟aof的,我們需要手動進行配置!
重啟redis服務
如果這個aof文件有錯誤,這時候redis是啟動不起來,我們需要修改這個aof文件。redis給我們提供了一個工具:redis-check-aof
如果文件正常,重啟就可以恢復數據了。
優點和缺點
① 優點:
- 每一次修改個都同步,文件的完整性更好。
- 每秒同步一次,可能會丟失一秒的數據
- 默認從不同步,效率更高的!
②缺點:
- 相對於數據文件來說,aof遠遠大於rdb,修復的速度也比r'd'b慢!
- Aof運行效率也要比rdb慢,所以redis默認的配置就是rdb持久化!
如果aof文件大於64m(aof默認大小),太大了!fork一個新的進程來將我們的文件進行重寫。
擴展:
1.RDB持久化方式能夠在指定的時間間隔內對你數據進行快照存儲。
2.aof持久化方式記錄每次對數據服務器寫的操作,當服務器重啟的時候會重新執行這些命令來恢復原始的數據,AOF命令以Redistribution協議追加保存每次寫的操作到文件末尾,Redis還能對AOF文件進行后台重新,使得AOF文件的體積不至於過大。
3.只做緩存,如果你只希望你的數據在服務器運行的時候存在,你也可以不是有任何持久化
4.同時開啟兩種持久化方式:
- 在這種情況下,當redis重啟的時候會優先載入AOF文件來恢復原始的數據,因為在通常情況下AO發文件班車的數據集要比RDB文件保存的數據集要完整。
- RDB的數據不實時,同時使用兩者時服務器重啟也只會找AOF文件,那要不要只使用AOF呢?不建議,因為RDB更適合用於備份數據庫,快速重啟,而且不會有AOF可能潛在的Bug,留着作為一個萬一的手段。
5.性能建議:
因為rdb文件只用作后備用途,建議在在sjava上持久化rdb文件,而且只要15分鍾備份一次就夠了,只保留sava 900 1 這條規則。
如果Enable aof,好處是在最惡情況下也只會丟失不超過兩秒數據。
如果不enable aof,僅靠master-slave repllcation 實現高可用性也可以。