<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] 持久化就是把**內存的數據寫到磁盤中**,防止服務宕機導致內存數據丟失。 Redis 支持兩種方式的持久化,一種是`RDB`的方式,一種是`AOF`的方式。**前者會根據指定的規則定時將內存中的數據存儲在硬盤上**,而**后者在每次執行完命令后將命令記錄下來**。一般將兩者結合使用。 ## RDB (Redis DataBase) `RDB`是 Redis 默認的持久化方案。,在指定的時間間隔內將內存中的數據集快照寫入磁盤(在指定目錄下生成一個`dump.rdb`二進制文件)。Redis 重啟會加載`dump.rdb`文件恢復數據。 ~~~text save 3600 1 save 300 100 save 60 10000 ~~~ ### 執行過程 :-: ![](https://img.kancloud.cn/6e/70/6e70a09ad1fc2382b16f3daa36025fda_593x357.png) * 執行`BGSAVE`命令 * Redis 父進程判斷當前**是否存在正在執行的子進程**,如果存在,`BGSAVE`命令直接返回。 * 父進程執行 `fork` 操作**創建子進程**,`fork` 操作過程中父進程會阻塞 * 父進程 `fork `完成后,**父進程繼續接收并處理客戶端的請求**,而子**進程開始將內存中的數據寫進硬盤的臨時文件**; * 當子進程寫完所有數據后會**用該臨時文件替換舊的 RDB 文件**。 Redis 啟動時會讀取 RDB 快照文件,將數據從硬盤載入內存。通過 RDB 方式的持久化,,一旦 Redis 異常退出,就會丟失最近一次持久化以后更改的數據。 ### 觸發機制: 1. **手動觸發**:執行`SAVE`或`BGSAVE`命令。`SAVE`命令執行快照的過程會阻塞所有客戶端的請求,應避免在生產環境使用此命令。`BGSAVE`命令可以在后臺異步進行快照操作,快照的同時服務器還可以繼續響應客戶端的請求,因此需要手動執行快照時推薦使用`BGSAVE`命令。 2. **被動觸發**: * 根據配置規則進行自動快照,如`SAVE 100 10`,100 秒內至少有 10 個鍵被修改則進行快照。 * 如果從節點執行全量復制操作,主節點會自動執行 `BGSAVE` 生成 RDB 文件并發送給從節點。 * 默認情況下執行 `shutdown` 命令時,如果沒有開啟 AOF 持久化功能則自動執行`BGSAVE`。 * 執行 `flushall` 命令,也會觸發我們的rdb規則! ### 恢復數據 將 rdb 文件放在我們 redis 啟動目錄。redis 啟動時自動檢查 dump.rdb ### 優點 1. `Redis 加載 RDB 恢復數據遠遠快于 AOF 的方式`。 2. 使用**單獨子進程來進行持久化**,主進程不會進行任何 IO 操作,**保證了 Redis 的高效性** ### 缺點 1.** RDB 方式數據無法做到實時持久化**,因為 `BGSAVE` 每次運行都要執行 `fork` 操作創建子進程,屬于重量級操作,頻繁執行成本比較高。 2. RDB 文件使用特定二進制格式保存,Redis 版本升級過程中有多個格式的 RDB 版本,**存在老版本 Redis 無法兼容新版 RDB 格式的問題**。 ## AOF(Append Only File) AOF(append only file)持久化:以獨立日志的方式記錄每次寫命令,將Redis執行過的所有指令記錄下來(讀操作不記錄),只許追加文件 但不可以改寫文件,Redis 重啟時會重新執行 AOF 文件中的命令達到恢復數據的目的。 AOF 的**主要作用是解決了數據持久化的實時性**,AOF 是 Redis 持久化的主流方式。 默認情況下 Redis 沒有開啟 AOF 方式的持久化,可以通過`appendonly`參數啟用: ~~~ appendonly yes ~~~ 開啟 AOF 方式持久化后每執行一條寫命令,Redis 就會將該命令寫進`aof_buf`緩沖區,AOF 緩沖區根據對應的策略向硬盤做同步操作。 默認情況下系統**每 30 秒**會執行一次同步操作。為了防止緩沖區數據丟失,可以在 Redis 寫入 AOF 文件后主動要求系統將緩沖區數據同步到硬盤上。可以通過`appendfsync`參數設置同步的時機 ~~~ appendonly no # 默認是不開啟aof模式的,默認是使用rdb方式持久化的,在大部分所有的情況下, rdb完全夠用! appendfilename "appendonly.aof" # 持久化的文件的名字 # appendfsync always # 每次修改都會 sync。消耗性能 appendfsync everysec # 每秒執行一次 sync,可能會丟失這1s的數據! # appendfsync no # 不執行 sync,這個時候操作系統自己同步數據,速度最快! ~~~ ### 執行過程 :-: ![](https://img.kancloud.cn/ab/87/ab878a61afad39821c2d86965a26a9a3_786x655.png) 1. 所有的寫入命令會追加到 AOF 緩沖區中 2. AOF 緩沖區根據對應的策略向硬盤同步 3. 隨著 AOF 文件越來越大,需要定期對 AOF 文件進行重寫,達到壓縮文件體積的目的。AOF 文件重寫是把 Redis 進程內的數據轉化為寫命令同步到新 AOF 文件的過程。 4. 當 Redis 服務器重啟時,可以加載 AOF 文件進行數據恢復。 如果這個 aof 文件有錯位,這時候 redis 是啟動不起來的嗎,我們需要修復這個aof文件 redis 給我們提供了一個工具 `redis-check-aof --fix` ### 優點 1. AOF 可以更好的保護數據不丟失,可以配置 AOF 每秒執行一次`fsync`操作,如果 Redis 進程掛掉,最多丟失 1 秒的數據 2. AOF 以 `append-only` 的模式寫入,所以沒有磁盤尋址的開銷,寫入性能非常高。 ### 缺點 1. 對于同一份文件 AOF 文件比 RDB 數據快照要大。 2. 數據恢復比較慢。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看