Redis 持久化雙雄:RDB 與 AOF 深度解析

Redis 是一種內存數據庫,為了保證數據在服務器重啟或故障時不丟失,提供了兩種持久化方式:RDB(Redis Database)和 AOF(Append Only File)。以下是它們的詳細介紹:

一、RDB 持久化

  • 工作原理:RDB 持久化是將 Redis 在內存中的數據庫狀態保存到磁盤上的一個 RDB 文件中。可以通過配置文件設置觸發 RDB 持久化的條件,例如在指定的時間間隔內,當數據發生一定次數的修改時,自動觸發 RDB 快照。也可以手動執行SAVEBGSAVE命令來生成 RDB 文件。SAVE命令會阻塞 Redis 服務器,直到 RDB 文件生成完畢;BGSAVE命令則會在后臺 fork 一個子進程來執行 RDB 文件的生成,不會阻塞服務器。
  • 優點
    • 文件緊湊:RDB 文件是一個經過壓縮的二進制文件,它存儲了某個時間點上 Redis 數據庫的完整快照,占用空間相對較小,便于傳輸和備份。
    • 恢復速度快:在恢復數據時,RDB 文件可以直接被加載到內存中,速度比 AOF 快很多,因為它只需要將文件中的數據讀入內存即可,不需要像 AOF 那樣重新執行一遍命令日志。
  • 缺點
    • 數據可能丟失:由于 RDB 是按照一定的時間間隔進行快照的,如果在兩次快照之間發生服務器故障,那么這期間的數據修改將會丟失。
    • fork 進程開銷:在執行BGSAVE命令時,需要 fork 一個子進程來進行數據持久化,這個過程會消耗一定的內存和 CPU 資源,可能會影響服務器的性能。

二、AOF 持久化

  • 工作原理:AOF 持久化是將 Redis 執行的寫命令以日志的形式追加到 AOF 文件的末尾。當 Redis 服務器重啟時,會重新執行 AOF 文件中的命令,以恢復數據庫的狀態。AOF 文件的寫入可以配置為不同的策略,如always(每執行一條寫命令就立即寫入磁盤)、everysec(每秒寫入一次磁盤)和no(由操作系統決定何時寫入磁盤)。
  • 優點
    • 數據安全性高:可以通過配置always策略,保證每一條寫命令都被持久化到磁盤,最大限度地減少數據丟失的風險。即使采用everysec策略,在最壞的情況下也只會丟失一秒鐘的數據。
    • 可讀性好:AOF 文件是一個文本文件,內容是 Redis 的寫命令,易于閱讀和分析,方便進行故障排查和數據恢復。
  • 缺點
    • 文件體積大:由于 AOF 文件記錄了所有的寫命令,隨著時間的推移,文件會越來越大,占用的磁盤空間也會越來越多。雖然 Redis 提供了BGREWRITEAOF命令來對 AOF 文件進行重寫,壓縮文件體積,但在重寫過程中仍然會消耗一定的資源。
    • 恢復速度慢:在恢復數據時,需要重新執行 AOF 文件中的所有命令,因此恢復速度比 RDB 慢很多,尤其是當 AOF 文件非常大時,恢復時間可能會很長。

實際應用中,通常會將 RDB 和 AOF 兩種持久化方式結合使用,以充分發揮它們的優點,同時避免各自的缺點。例如,可以使用 RDB 來定期備份數據庫,以便在服務器故障時能夠快速恢復數據;同時使用 AOF 來記錄實時的寫命令,保證數據的安全性和完整性。

注:RDB與AOF對比表

對比維度RDBAOF
備份量備份量取決于快照時刻的數據量,通常較小,因為存儲的是某一時刻的完整數據狀態備份量隨時間不斷增長,因為持續記錄寫命令,當使用BGREWRITEAOF重寫后會減少,但總體通常比 RDB 大
保存間隔時間可通過配置設置,如多久內有多少次寫操作就觸發快照,常見配置如 900 秒內有 1 個 key 變化、300 秒內有 10 個 key 變化、60 秒內有 10000 個 key 變化等對于always策略,每條命令都保存;everysec策略每秒保存;no策略由操作系統決定保存時間間隔
數據安全性相對較低,按時間間隔快照,兩次快照間故障會丟失數據,如設 5 分鐘快照,第 3 分鐘崩潰則丟失這 3 分鐘數據較高,可配置寫入策略減少數據丟失。always策略基本不丟數據,everysec策略最壞丟 1 秒數據
恢復速度快,二進制文件,恢復時直接加載數據到內存,數據量大時優勢明顯慢,需重新執行 AOF 文件中所有寫命令,文件大時恢復時間長
文件大小文件緊湊,占用空間小,是壓縮二進制文件,存儲時間點數據庫完整快照文件體積大,記錄所有寫命令,隨時間增大,可用BGREWRITEAOF重寫但消耗資源
性能影響執行BGSAVE需 fork 子進程,消耗內存和 CPU 資源,數據量大時可能短暫阻塞服務器取決于寫入策略。always嚴重影響性能;everysec影響小;no由操作系統決定,性能影響最小但安全性低
可讀性二進制文件,內容不可讀,不便查看分析文本文件,內容為 Redis 寫命令,可讀性好,便于故障排查和數據恢復
適用場景適用于對恢復速度要求高、能容忍一定數據丟失的場景,如緩存系統適用于對數據安全性要求高的場景,如數據庫系統

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80954.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80954.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80954.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構|并查集

Hello !朋友們,這是我在學習過程中梳理的筆記,以作以后復習回顧,有時略有潦草,一些話是我用自己的話描述的,可能不夠準確,還是感謝大家的閱讀! 目錄 一、并查集Quickfind 二、兩種算…

【GPU 微架構技術】Pending Request Table(PRT)技術詳解

PRT(Pending Request Table)是 GPU 中用于管理 未完成內存請求(outstanding memory requests)的一種硬件結構,旨在高效處理大規模并行線程的內存訪問需求。與傳統的 MSHR(Miss Status Handling Registers&a…

遠程訪問你的家庭NAS服務器:OpenMediaVault內網穿透配置教程

文章目錄 前言1. OMV安裝Cpolar工具2. 配置OMV遠程訪問地址3. 遠程訪問OMV管理界面4. 固定遠程訪問地址 前言 在這個數據爆炸的時代,無論是管理家人的照片和視頻,還是企業老板處理財務報表和技術文檔,高效的數據管理和便捷的文件共享已經變得…

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析 在現代分布式系統中,熔斷 (Circuit Breaker) 和 降級 (Degrade) 是保障系統彈性與高可用性的核心機制。本文將系統解析兩者的原理、區別與協同方式,并結合主流框架 (Resilience4j、S…

docker-vllm運行大模型

vllm鏡像下載,國內代理源 vllm/vllm-openai - Docker Image - 毫秒鏡像https://1ms.run/r/vllm/vllm-openai 執行下載docker pull docker.1ms.run/vllm/vllm-openai 查看本地鏡像 查看鏡像 查看鏡像 docker images導出鏡像 docker save -o E:\docker\ollama.tar …

基于tabula對pdf中多個excel進行識別并轉換成word中的優化(四)

對上一節進行優化: 1、識別多個excel 2、將表格中的nan替換成空字符串 一、示例中的pdf內容 二、完整代碼參考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…

【10分鐘讀論文】Power Transmission Line Inspections電力視覺水文

標題Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems 2024 評分一顆星 論文《Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems》的核心內…

linux安裝ragflow

先安裝docker,操作步驟參考文章: Linux安裝Docker docker安裝完畢,下載ragflow源碼: https://github.com/infiniflow/ragflow 下載完成,進入docker文件夾中,修改.env文件,因為默認安裝的是sli…

學習記錄:DAY20

技術探索之旅:YAML配置,依賴注入、控制反轉與Java注解 前言 最近有點懶了,太松懈可不行。為了讓自己保持學習的動力,我決定將最近的學習內容整理成博客,目標是讓未來的自己也能輕松理解。我會盡量以整體記錄的方式呈…

MCP:人工智能時代的HTTP?探索AI通信新標準

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

首版次誤區有哪些?與軟件測試報告又有什么聯系?

在軟件開發與測試領域,"首版次"這一概念關乎軟件的版本控制與管理,是確保產品質量和發布節奏的重要環節。首版次,通常是指軟件產品第一個對外發布或內部驗收的版本號,標志著一次完整開發周期的結束和下一階段工作的開始…

Laravel+API 接口

LaravelAPI 接口 網課連接:BIlibili. 中文文檔. 1.RestFul Api編碼風格 一、API設計 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用這個域名來測試(推薦規范) 在…

MIT6.S081-lab7前置

MIT6.S081-lab7前置 這部分包含了設備中斷和鎖的內容 設備中斷 之前系統調用的時候提過 usertrap ,而我們的設備中斷,比如計時器中斷也會在這里執行,我們可以看看具體的邏輯: void usertrap(void) {int which_dev 0;if((r_sst…

Linux 下編譯BusyBox

一、linux下編譯 1.拉取busybox源碼 git clone https://github.com/mirror/busybox.git 內容如下 2.配置make,建議在linux下單獨開一個終端執行 進入busybox源碼目錄,使用如下命令 make menuconfig 3.報錯 解決辦法: 安裝ncurses sud…

Element:Cheack多選勾選效果邏輯判斷

效果展示 取消子級勾選&#xff0c;父級的勾選效果 代碼合集 &#xff08;1&#xff09;組件代碼 fromlist.cheackType 類型&#xff0c;permissio表示是權限. fromlist:[{id:1,children:[{...}]},...]傳遞的數據大致結構 <!-- 操作權限 --><template v-if"…

【3DMax腳本MaxScript開發:創建高效模型虛擬體綁定和材質管理系統,從3DMax到Unreal和Unity引擎_系列第一篇】

3ds Max 腳本開發 3ds Max 腳本開發&#xff1a;創建高效模型虛擬體綁定和材質管理系統3ds Max 插件制作背景&#xff1a;設計思路一、場景節點收集與過濾廢話不多說&#xff0c;直接上完整代碼&#xff1a;界面定義與基礎設置界面控件創建狀態變量核心邏輯函數過濾選項改變事件…

【Linux學習筆記】進程替換和自定義shell

【Linux學習筆記】進程替換和自定義shell &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】進程替換和自定義shell前言一.進程程序替換1.1 替換原理1.2 替換函數1.2.1函數解釋1.2.2命名理解 二.自主…

【辦公類-89-03】20250429AI寫的研討記錄,清除格式,統一格式,名字替換。部分加粗,添加頁眉

背景需求: 檢查自即,需要AI一下院內的五次科研培訓記錄。 本次用了豆包 豆包寫的不錯,也是“水字數”的高手 把每次培訓內容貼到WORD里 把AI資料貼到WORD里,發現問題: 1、字體、段落什么都是不統一的,需要統一改成宋體小四,1.5倍行距 2、十個研討人也要改成真人。就找…

unity Orbbec Femto Bolt接入unity流程記錄 AzureKinectExamples 插件 使用記錄

奧比中光的深度相機Orbbec Femto Bolt是Microsoft的Azure Kinect DK的升級版&#xff0c;根據官網的文檔配置環境遇到了一些問題&#xff0c;記錄一下。 注意&#xff1a; 官網文檔鏈接&#xff1a;Femto Bolt文檔 1、首先連接相機到電腦USB3.0&#xff0c;接通電源&#xf…

聊天室系統:多任務版TCP服務端程序開發詳細代碼解釋

1. 需求 目前我們開發的TCP服務端程序只能服務于一個客戶端&#xff0c;如何開發一個多任務版的TCP服務端程序能夠服務于多個客戶端呢? 完成多任務&#xff0c;可以使用線程&#xff0c;比進程更加節省內存資源。 2. 具體實現步驟 編寫一個TCP服務端程序&#xff0c;循環等…