redis persistence 之 append only file

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.