標籤:redis persistence aof append only file redis
1、還是先看看官方文檔:
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M01/95/60/wKiom1kUYB7T0ioxAACFTjabcQQ002.png" title="01.png" alt="wKiom1kUYB7T0ioxAACFTjabcQQ002.png" />
注: AOF 持久化日誌向伺服器擷取每次發生的寫操作,這日誌在伺服器啟動的時候執行,以恢複原來的資料集。這些寫命令會以redis自身協議的相同格式被日誌化。當這個記錄檔太大時,redis能夠在後台重寫這日誌。(讀操作不記錄,操作只需追加檔案內容,不允許改寫檔案。)
如果你願意,你可以完全不持久化,這種情況通常發生在伺服器運行時資料存在就行。
在同一個執行個體中可以結合使用 AOF 和 RDB。在這種情況下,Redi開啟時會重新執行 AOF 檔案,以使得恢複原來的資料集(因為這種恢複最完整)。
2、具體看看如何操作:
a、設定 redis.conf檔案,為了讓設定檔不太複雜,使用 cp 命令 備份一個 redis_aof.conf檔案。
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/95/61/wKiom1kUZtyxkuwzAABIABOoyxY274.png" title="02.png" alt="wKiom1kUZtyxkuwzAABIABOoyxY274.png" />
注: 預設為 appendonly no,在之前的設定檔的相關資訊中介紹過,修改appendonly yes 表示開啟 AOF。
b、 在寫入操作時,redis會在工作目錄中建立出一個appendonly.aof(即redis持久化記錄檔)。
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M00/95/61/wKioL1kUaLOw0NQYAAA-Ip3sG5k642.png" title="04.png" alt="wKioL1kUaLOw0NQYAAA-Ip3sG5k642.png" />
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M02/95/61/wKiom1kUaNaB8UU2AAAfCjlI-PM721.png" title="05.png" alt="wKiom1kUaNaB8UU2AAAfCjlI-PM721.png" />
c、執行flushall命令後,後關閉伺服器,使用ls -l 命令查看檔案,再使用cat 命令查看appendonly.aof檔案。(可以看到在同一個執行個體中可以結合使用 AOF 和 RDB。)
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M00/95/61/wKioL1kUbV6T2tbjAAAdXuplFas917.png" title="13.png" alt="wKioL1kUbV6T2tbjAAAdXuplFas917.png" />
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/95/61/wKiom1kUaW3C95cNAAAacl5c03U826.png" title="06.png" alt="wKiom1kUaW3C95cNAAAacl5c03U826.png" />
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/95/61/wKiom1kUaa_R962kAAA6cfP6RuM342.png" title="07.png" alt="wKiom1kUaa_R962kAAA6cfP6RuM342.png" />
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/95/61/wKioL1kUadmQumqoAAAZtVVlXQs647.png" title="08.png" alt="wKioL1kUadmQumqoAAAZtVVlXQs647.png" />
注: 示,可以看到appendonly.aof記錄了所有寫操作命令,包括 select 0,flushall等,如果重啟伺服器,使用 keys 進行查詢,還是會顯示空結果。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/95/61/wKioL1kUaoHz166eAAAkxIW8fEM389.png" title="09.png" alt="wKioL1kUaoHz166eAAAkxIW8fEM389.png" />
d、把 appendonly.aof 檔案中最後的 flushall 刪除後,在啟動伺服器。
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M01/95/61/wKioL1kUaz_Q4RM4AAApAa-Qmks563.png" title="10.png" alt="wKioL1kUaz_Q4RM4AAApAa-Qmks563.png" />
注: 可以看到資料已經被恢複
e、關閉伺服器後,破壞appendonly.aof檔案,再啟動伺服器。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/95/61/wKiom1kUbIOyntoqAAAcKMgDXFE212.png" title="11.png" alt="wKiom1kUbIOyntoqAAAcKMgDXFE212.png" />
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/95/61/wKiom1kUbMrBZ25DAAAtgIRzqoQ287.png" title="12.png" alt="wKiom1kUbMrBZ25DAAAtgIRzqoQ287.png" />
發現破壞檔案後,伺服器已無法啟動。由此可知, 在同一個執行個體中可以結合使用 AOF 和 RDB,伺服器開啟時redis優先從appendonly.aof檔案中讀取到記憶體,後執行命令。
f、鍵入 /usr/local/bin/redis-check-aof --fix appendonly.aof 指令後,可以重新啟動redis伺服器。
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUcYfB39KXAABgevkaPCs524.png" title="14.png" alt="wKioL1kUcYfB39KXAABgevkaPCs524.png" />
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/95/62/wKioL1kUccfQHYeiAAAp9omYomw775.png" title="15.png" alt="wKioL1kUccfQHYeiAAAp9omYomw775.png" />
3、redis.conf 下關於 AOF 的其他相關配置:
a、appendfsync 配置操作:
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/95/62/wKioL1kUc0yCm54cAADQT08tATU245.png" title="16.png" alt="wKioL1kUc0yCm54cAADQT08tATU245.png" />
示,可以看到:
always: 同步持久化,每次發生資料變更時立即把操作記錄到磁碟中,這中模式安全,但是效能差。
everysec: 出廠預設設定,非同步作業,每秒記錄。如果在一秒內蕩機,這一秒內的資料將會丟失。
no: 即不把資料變更操作記錄在磁碟中。
b、no-appendfsync-on-rewrite: 如果該參數設定為no,是最安全的方式,不會遺失資料,但是要忍受阻塞的問題。如果設定為yes,這就相當於將appendfsync設定為no,這說明並沒有執行磁碟操作,只是寫入了緩衝區
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/95/63/wKiom1kUdYbDC9xIAAAyGAEovKE720.png" title="17.png" alt="wKiom1kUdYbDC9xIAAAyGAEovKE720.png" />
5、AOF 的 rewrite:
a、AOF 採用檔案追加方式,這意味這檔案將會越來越大。針對這一問題,新增了重寫機制,當AOF 檔案的大小超過了所設定的闕值(臨界值)時, Redis 會啟動 AOF 檔案的內容壓縮,只儲存資料的最小指令集。
b、重寫原理:
AOF檔案持續增長而過大時,會fork出一條新進程來將檔案重寫(也是先寫臨時檔案最後再rename)。遍曆新進程的記憶體中資料,每條記錄有一條Set語句。
重寫aof檔案操作,並沒有讀取舊的aof檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了一個新的aof檔案,這一點和快照類似。
c、Redis會記錄上次重寫時的 AOF 大小時,預設配置是當 AOF 檔案大小是上次 rewrite 後大小的一倍且檔案大於64M時觸發。
6、AOF 相對於 RDB 的劣勢:
a、相同資料集的資料而言,aof 檔案 要遠大於rdb 檔案,恢複速度慢於rdb。
b、aof 運行效率要慢於rdb,每秒同步的策略效率較好,不同步效率和rdb相同。
本文出自 “12392717” 部落格,請務必保留此出處http://12402717.blog.51cto.com/12392717/1924767
redis persistence 之 append only file