<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[info] Redis持久化概述 持久化的功能:Redis是內存數據庫,數據都是存儲在內存中,為了避免進程退出導致數據的永久丟失,需要定期將Redis中的數據以某種形式(數據或命令)從 內存保存到硬盤。 當下次Redis重啟 時,利用持久化文件實現數據恢復。除此之外,為了進行災難備份,可以將持久化文件拷貝到一個遠程 位置。Redis持久化分為 RDB持久化和AOF持久化,前者將當前數據保存到硬盤,后者則是將每次執行 的寫命令保存到硬盤。 >[info] RDB RDB是一種快照存儲持久化方式,具體就是將Redis某一時刻的內存數據保存到硬盤的文件當中,默認保 存的文件名為dump.rdb,而在Redis服務器啟動時會重新加載dump.rdb文件的數據到內存當中恢復數據。 觸發 RDB 持久化過程分為 **手動觸發** 和 **自動觸發**。 >[info] 觸發機制 ### **手動觸發分別對應 save 和 bgsave 命令:** **save 命令:** 阻塞當前 Redis 服務器,直到 RDB 過程完成為止,對于內存比較大的實例會 **造成長時間阻塞**,線上環境不建議使用。 ***** **save 命令執行時的服務器狀態:** 前面提到過,當SAVE命令執行時,Redis 服務器會被阻塞,所以當SAVE命令正在執行時,客戶端發送的所有命令請求都會被拒絕。 只有在服務器執行完SAVE命令、重新開始接受命令請求之后,客戶端發送的命令才會被處理。 ***** **bgsave 命令:** Redis 進程執行 fork 操作創建子進程,RDB 持久化過程由子進程負責,完成后自動結 束。阻塞只發生在 fork 階段,一般時間很短。 顯然 bgsave 命令是針對save阻塞問題做的優化。因此Redis內部所有的涉RDB的操作都采用 bgsave 的方式。 >[info] 流程說明 bgsave 是主流的觸發 RDB 持久化方式,根據下圖了解它的運作流程: ![](https://img.kancloud.cn/d1/7d/d17d569a0b765bfabbdb050ee327d460_798x611.png) **流程解析:** 1. 執行 bgsave 命令,Redis 父進程判斷當前是否存在正在執行的子進程,如 RDB/AOF 子進程,如果存在 bgsave 命令直接返回。 2. 父進程執行 fork 操作創建子進程,fork 操作過程中父進程會阻塞,通過 info stats 命令查看latest_fork_usec 選項,可以獲取最近一個 fork 操作的耗時,單位為微秒。 3. 父進程 fork 完成后,bgsave 命令返回“Background saving started信息并不再阻塞父進程,可以繼續響應其他命令。 4. 子進程創建 RDB 文件,根據父進程內存生成臨時快照文件,完成后對原有文件進行原子替換。執行lastsave 命令可以獲取最后一次生成 RDB 的時間,對應 info 統計的 rdb_last_save_time 選項。 5. 進程發送信號給父進程表示完成,父進程更新統計信息,具體見 info Persistence 下的 rdb_* 相關選項。 >[info] 配置和工作原理 RDB就像是一臺專門給Redis數據存儲拍照的照相機。當滿足觸發策略時,Redis會通過將所有數據 轉儲到本地磁盤上-一個文件中的方式給Redis中的數據拍一張“照片”。在詳細介紹上述過程前,我們先 來解釋一下save 參數的含義。save參數決定了上一節中提到的RDB觸發策略,這個值的格式是 X1,y1,X2,y2,...,其含義是,如果超過y個鍵發生改變且此時沒有轉儲正在發生,則在x秒后進行數據轉儲。 ***** **redis.conf 默認配置:** ``` save 900 1 save 300 10 save 60 10000 ``` >[info] RDB 文件的處理 >[info] RDB方式的優缺點 **優點:** 1. RDB 是一個非常緊湊的文件,它保存了 Redis 在某個時間點上的數據集。 這種文件非常適合用于進行備份: 比如說,你可以在最近的 24小時內,每小時備份一次 RDB 文件,并且在每個月的每一天,也備份一個RDB 文件。 這樣的話,即使遇上問題,也可以隨時將數據集還原到不同的版本。 2. .RDB 可以最大化 Redis 的性能:父進程在保存 RDB 文件時唯一要做的就是 fork 出一個子進程,然后 這個子進程就會處理接下來的所有保存工作,父進程無須執行任何磁盤 I/O 操作。 3. RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。 **缺點:** 1. RDB 方式數據沒辦法做到實時持久化/秒級持久化 如果服務器宕機的話,采用RDB的方式會造成某個時段內數據的丟失,比如我們設置10分鐘同步一次或5分鐘達到1000次寫入就同步一次,那么如果還沒達到觸發 條件服務器就死機了,那么這個時間段的數據會丟失。 2. 使用 bgsave 命令在forks子進程時,如果數據量太大,forks的過程也會發生阻塞,另外,forks子進程會耗費內存。 針對 RDB 不適合實時持久化的問題,Redis 提供了 AOF 持久化方式來解決。
                  <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>

                              哎呀哎呀视频在线观看