Redis 持久化方式:RDB(Redis Database)和 AOF(Append Only File)


Redis
本部分內容是關于博主在學習 Redis 時關于持久化部分的記錄,介紹了 RDB 和 AOF 兩種持久化方式,詳細介紹了持久化的原理、配置、使用方式、優缺點和使用場景。并對兩種持久化方式做了對比。文章最后介紹了 Redis 持久化的意義并與其他常見的緩存技術做了對比。本文來源有視頻課程記錄,有其他博主的博客,也有 AI 查詢等等。


Redis 作為一個緩存組件,是否需要持久化功能?持久化的是什么?有什么意義?讓我們根據這幾個問題去了解 Redis 的持久化。

首先,Redis 是一個服務,是服務就會出現重啟,崩潰和宕機的情況,持久化的方式可以確保數據在 Redis 服務器重啟或崩潰后能夠恢復。所以持久化的作用還是很重要的,是確保數據在服務重啟后能夠恢復的關鍵機制。

接著說第二個問題,持久化的數據是什么?在解釋這個問題的時候就要涉及到 Redis 持久化的方式了,不同的方式持久化的數據有所不同,其意義和使用場景也不同。Redis 的兩種主要持久化方式是 RDB(Redis Database)AOF(Append Only File)

一、RDB(Redis Database)

當選擇使用 Redis 服務時,會默認選用一個方式進行持久化,這個方式一定是用于中小型項目體量,并且輕量化,易使用。RDB 就是 Redis 默認的持久化方式,它通過定期保存內存數據的快照到磁盤文件中,實現數據的持久化。

RDB 通過定期生成內存數據的快照(Snapshot)并將其保存到磁盤上的二進制文件中,實現數據的持久化。RDB 文件是一個壓縮的二進制文件,默認命名為 dump.rdb,它記錄了 Redis 在某一時刻的內存數據狀態。即 RDB 文件是二進制格式,存儲的是 Redis 當前數據集的快照。

工作原理:在 Redis 配置文件 redis.conf 中,可以通過 save 指令設置快照保存的觸發條件。

  • 手動觸發:使用 SAVE(同步阻塞操作)或 BGSAVE(通過 fork 創建子進程進行持久化,不阻塞主線程)命令。
  • 自動觸發:通過配置 save 參數(如 save 900 1 ,表示900秒內至少有1個鍵發生變化時自動保存快照)。

使用方式:在 Redis 配置文件中設置自動保存規則。

save 900 1    # 900秒內至少有1個鍵變化時保存快照
save 300 10   # 300秒內至少有10個鍵變化時保存快照
save 60 10000 # 60秒內至少有10000個鍵變化時保存快照

當觸發條件滿足時,Redis 會自動觸發快照操作,會通過 fork 創建一個子進程,由子進程負責將當前內存中的數據寫入到一個臨時文件中。寫入完成后,臨時文件會替換之前的 RDB 文件。另外,RDB 文件以二進制格式存儲,這種格式緊湊且加載速度快。

當 Redis 服務重啟時,Redis 會加載 RDB 文件中的數據,將其恢復到內存中,從而恢復到上次快照時的狀態。由于 RDB 文件是二進制格式且經過壓縮,恢復速度較快,適合用于快速啟動。

優點:

  • 文件小:RDB 文件體積小,適合備份和全量復制。
  • 恢復速度快:加載 RDB 文件恢復數據的速度非常快。
  • 對性能影響小:通過子進程進行磁盤 I/O 操作,不會阻塞主線程。

缺點:

  • 數據丟失風險:在兩次快照之間,如果 Redis 服務器發生故障,可能會丟失部分數據。
  • 快照操作可能阻塞:在數據量較大時,fork 子進程可能會導致短暫的阻塞。

適用場景:

  • 數據備份:適合定期備份數據。
  • 災難恢復:快速恢復數據。
  • 全量復制:用于 Redis 主從復制中的數據同步。

RDB 持久化通過定期生成內存數據的快照并保存到磁盤文件中,確保 Redis 服務重啟后能夠快速恢復數據。它適用于對數據丟失容忍度較高且需要快速恢復的場景。對于對數據安全性要求更高的場景,可以結合 AOF 持久化或使用混合持久化策略。

二、AOF(Append Only File)

如果該方式不是默認的話,說明該方式會應對大型項目,體量大。AOF 持久化通過記錄每次寫操作的命令到日志文件中,實現數據的持久化。AOF 文件是一個純文本文件,記錄了所有修改 Redis 數據的命令,格式與 Redis 的命令行協議一致。

使用方式:在 Redis 配置文件中啟用 AOF 并設置同步策略。

appendonly yes 			
appendfsync everysec # 這表示啟用 AOF 持久化,并每秒同步一次。

AOF 的工作原理可以分為以下幾個步驟:

  • 命令追加(Command Appending):
    • 每次執行寫操作時,Redis 將命令追加到內存中的緩沖區 aof_buf。
    • 緩沖區的內容會根據配置的同步策略寫入到 AOF 文件中。
  • 文件同步(File Syncing):根據 appendfsync 的配置,Redis 提供三種同步策略。
    • always:每次寫操作后立即同步到磁盤,數據最安全,但性能開銷最大。
    • everysec:每秒同步一次,性能和數據安全性平衡。
    • no:由操作系統決定同步時機,性能最高,但可能丟失更多數據。
  • 文件重寫(File Rewriting):
    • AOF 文件會隨著操作的增加而變大,Redis 提供了 AOF 重寫機制來壓縮文件大小。
    • 重寫過程由 BGREWRITEAOF 命令觸發,Redis 會創建一個子進程,將當前內存中的數據以最小化的方式重寫到一個新的 AOF 文件中。
    • 自動重寫可以通過配置 auto-aof-rewrite-percentageauto-aof-rewrite-min-size 參數實現。
  • 重啟加載(Loading on Restart):
    • 當 Redis 重啟時,會加載 AOF 文件中的命令并逐條執行,以恢復數據。
    • 如果同時啟用了 RDB 和 AOF,Redis 會優先加載 AOF 文件。

當 Redis 服務重啟時,通過重放 AOF 文件中的命令,Redis 可以恢復到最近一次寫操作的狀態。即使在 Redis 服務崩潰時,AOF 也能保證數據的完整性,最多丟失最后一次同步前的數據,具有高數據安全性。

優點:

  • 高數據安全性:AOF 提供了更高的數據安全性,尤其是在使用 everysecalways 同步策略時。
  • 可讀性高:AOF 文件是文本格式,記錄了實際的 Redis 命令,便于閱讀和分析。
  • 支持修復工具:如果 AOF 文件損壞,可以使用 redis-check-aof 工具進行修復。
  • 靈活的同步策略:用戶可以根據需求選擇不同的同步策略,平衡性能和數據安全性。

缺點:

  • 文件較大:AOF 文件記錄了所有寫操作,文件體積通常比 RDB 文件大。
  • 恢復速度慢:恢復數據時需要逐條重放命令,速度較慢。
  • 性能開銷:高頻磁盤寫入可能影響 Redis 的寫入性能。

適用場景

  • 高數據安全性:適用于對數據丟失容忍度低的場景,如金融系統、訂單系統。
  • 寫操作頻繁:適合寫操作頻繁且需要實時持久化的場景。
  • 調試和審計:AOF 文件記錄了詳細的命令日志,便于開發和測試中的調試。

AOF 持久化通過記錄每個寫操作的命令,提供了高數據安全性和靈活性。它適用于對數據丟失敏感的場景,但可能會帶來較大的文件體積和恢復速度較慢的問題。在實際應用中,AOF 可以與 RDB 混合使用,以兼顧數據安全性和恢復速度。

三、匯總

持久化方式優點缺點適用場景
RDB文件小、恢復速度快、對性能影響小數據丟失風險、快照操作可能阻塞數據備份、災難恢復、全量復制
AOF數據安全性高、文件可讀性強、支持修復文件較大、恢復速度慢、性能開銷數據安全性要求高、誤操作恢復

如果需要高數據安全性,建議使用 AOF;如果需要快速恢復和較小的磁盤占用,建議使用 RDB。

四、Redis 對比其他緩存技術

Redis 的持久化功能是其作為緩存系統的一個重要特性,相比其他緩存技術(如 Memcached、Guava Cache、Caffeine 等),Redis 的持久化功能在某些場景下具有顯著優勢。

Redis 的持久化功能具有以下優勢。

  • 數據持久化:Redis 提供了兩種主要的持久化方式:RDB(快照)和 AOF(追加文件),以及混合持久化(RDB + AOF)。這些持久化方式確保了數據在 Redis 服務器重啟或崩潰后能夠恢復。相比之下,Memcached 和 Guava Cache 等緩存技術不支持持久化,數據在重啟后會丟失。
  • 高數據安全性:AOF 持久化通過記錄每個寫操作,確保即使在 Redis 崩潰時,也能恢復到非常接近崩潰時的狀態。這種高數據安全性使得 Redis 在金融、交易系統等對數據完整性要求極高的場景中具有明顯優勢。
  • 快速恢復:RDB 持久化通過快照文件快速恢復數據,適合需要快速啟動的場景。混合持久化(RDB + AOF)結合了兩者的優點,既保證了數據的完整性,又提高了恢復速度。
  • 靈活的配置:Redis 允許用戶根據需求選擇不同的持久化策略。例如,AOF 的 appendfsync 參數可以設置為 alwayseverysecno,以平衡數據安全性和性能。

Redis 的持久化功能存在一定的開銷。

  • 性能開銷:AOF 持久化需要頻繁寫入磁盤,可能會影響 Redis 的寫入性能。
  • 文件大小:AOF 文件通常比 RDB 文件大,尤其是在寫操作頻繁的情況下。
  • 恢復速度:AOF 恢復數據時需要重放所有命令,速度較慢。

Redis 與 Memcached 對比:

  • 持久化:Redis 支持持久化,而 Memcached 不支持。
  • 數據結構:Redis 支持多種數據結構(如字符串、哈希、列表、集合等),而 Memcached 僅支持簡單的鍵值對。
  • 適用場景:Redis 適合需要持久化和復雜數據結構的場景,而 Memcached 更適合簡單的緩存需求。

Redis 與 Guava Cache/Caffeine 對比:

  • 本地緩存 vs 分布式緩存:Guava Cache 和 Caffeine 是本地緩存,不支持分布式。Redis 是分布式緩存,支持多節點共享數據。
  • 持久化:Guava Cache 和 Caffeine 不支持持久化。
  • 適用場景:對于單機應用,Guava Cache 或 Caffeine 是高性能的選擇;對于分布式系統,Redis 是更好的選擇。

各種緩存技術的使用場景:

  • Redis:適用于需要高可用性、數據持久化和復雜數據結構的場景,如分布式系統、電商系統、實時數據處理等。
  • Memcached:適用于簡單的緩存需求,如網頁緩存。
  • Guava Cache/Caffeine:適用于單機應用,尤其是需要高性能本地緩存的場景。

Redis 的持久化功能使其在需要數據安全性和高可用性的場景中具有顯著優勢,但這種優勢也帶來了性能開銷和文件大小的增加。在選擇緩存技術時,應根據具體需求權衡數據安全性、性能和成本。對于分布式系統和復雜數據結構的需求,Redis 是更優的選擇。

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

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

相關文章

Linux中lshw相關的命令

? lshw(List Hardware)是一個在 Linux 系統中用于顯示硬件詳細信息的強大工具。以下是一些常見的 lshw 相關命令及其用法: 1. 安裝 lshw 在使用 lshw 之前,你可能需要先安裝它。不同的 Linux 發行版安裝方式有所不同&#xff1…

爬蟲第九篇-結束爬蟲循環

最近在學習Python爬蟲的過程中,遇到了一個很有趣的問題:如何優雅地結束爬蟲循環?今天,我想和大家分享一下我的發現和心得。 一、爬蟲循環結束的常見問題 在寫爬蟲時,我們經常會遇到這樣的情況:當爬取到的…

Vue3狀態管理新選擇:Pinia使用完全指南

一、為什么需要狀態管理? 在Vue應用開發中,當我們的組件樹變得復雜時,組件間的數據傳遞會成為棘手的問題。傳統方案(如props/$emit)在多層嵌套組件中會變得笨拙,這時狀態管理工具應運而生。Vue3帶來了全新…

一文掌握模擬登錄的基本原理和實戰

文章目錄 1. 模擬登錄的基本原理1.1 登錄流程1.2 關鍵技術2. 模擬登錄的實戰步驟2.1 分析登錄頁面2.2 使用 Requests 實現模擬登錄2.3 處理驗證碼2.4 使用 Selenium 實現模擬登錄3. 實戰案例:模擬登錄豆瓣3.1 分析豆瓣登錄頁面3.2 實現代碼4. 注意事項5. 總結模擬登錄是爬蟲開…

推薦算法工程師的技術圖譜和學習路徑

推薦算法工程師的技術圖譜和學習路徑可以從多個維度進行概述,可以總結如下: 一、技術圖譜 推薦算法工程師需要掌握的技術棧主要分為以下幾個方面: 數學基礎: 微積分、線性代數、概率論與統計學是推薦算法的基礎,用于理解模型的數學原理和優化算法。高等數學、最優化理論…

ONNX轉RKNN的環境搭建

將ONNX模型轉換為RKNN模型的過程記錄 工具準備 rknn-toolkit:https://github.com/rockchip-linux/rknn-toolkit rknn-toolkit2:https://github.com/airockchip/rknn-toolkit2 rknn_model_zoo:https://github.com/airockchip/rknn_model_zoo ultralytics_yolov8:https://github…

華為認證考試證書下載步驟(紙質+電子版)

華為考試證書可以通過官方渠道下載相應的電子證書,部分高級認證如HCIE還支持申請紙質證書。 一、華為電子版證書申請步驟如下: ①訪問華為培訓與認證網站 打開瀏覽器,登錄華為培訓與認證官方網站 ②登錄個人賬號 在網站首頁,點…

面試八股文--數據庫基礎知識總結(2) MySQL

本文介紹關于MySQL的相關面試知識 一、關系型數據庫 1、定義 關系型數據庫(Relational Database)是一種基于關系模型的數據庫管理系統(DBMS),它將數據存儲在表格(表)中,并通過表格…

介紹下pdf打印工具類 JasperPrint

JasperPrint 工具類深度解析 JasperPrint 是 JasperReports 框架中實現 PDF 打印的核心載體類,其本質是 填充數據后的可打印報表對象,承擔著從模板編譯、數據填充到格式輸出的全流程控制。以下從 7 個維度展開深度解析: 一、核心定位與生命周…

LVS+Keepalived 高可用集群搭建

一、高可用集群: 1.什么是高可用集群: 高可用集群(High Availability Cluster)是以減少服務中斷時間為目地的服務器集群技術它通過保護用戶的業務程序對外不間斷提供的服務,把因軟件、硬件、人為造成的故障對業務的影響…

從【人工智能】到【計算機視覺】,【深度學習】引領的未來科技創新與變革

前幾天偶然發現了一個超棒的人工智能學習網站,內容通俗易懂,講解風趣幽默,簡直讓人欲罷不能。忍不住分享給大家,點擊這里立刻跳轉,開啟你的AI學習之旅吧! 前言 – 人工智能教程https://www.captainbed.cn/l…

銀河麒麟高級服務器操作系統在線調整/pro/{PID}/limits文件中nofile的軟限制和硬限制參數值操作方法

銀河麒麟高級服務器操作系統在線調整/pro/{PID}/limits文件中nofile的軟限制和硬限制參數值操作方法 一 系統環境二 使用場景三 操作步驟 一 系統環境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…

數據結構-直接插入和希爾排序

這次,我們來講數據結構的排序的直接插入。 一:排序的思想:把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列 相當于,我們打牌如上圖…

基于coze+微信小程序的ai對話

界面介紹&#xff1a; 代碼&#xff1a;&#xff08;替換你的coze的配置&#xff09; <template><view class"container"><!-- 高斯模糊背景 --><view class"animated-bg"><view class"gradient-blob"></view…

Day11,Hot100(貪心算法)

貪心 &#xff08;1&#xff09;121. 買賣股票的最佳時機 第 i 天賣出的最大利潤&#xff0c;即在前面最低價的時候買入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…

Linux內核自定義協議族開發指南:理解net_device_ops、proto_ops與net_proto_family

在Linux內核中開發自定義協議族需要深入理解網絡協議棧的分層模型。net_device_ops、proto_ops和net_proto_family是三個關鍵結構體,分別作用于不同的層次。本文將詳細解析它們的作用、交互關系及實現方法,并提供一個完整的開發框架。 一、核心結構體的作用與層級關系 struct…

SpringBoot 中的 Redis 序列化

SpringBoot 中的 Redis 序列化 在 Spring Boot 中&#xff0c;Redis 的序列化是指將 Java 對象轉換為字節流&#xff08;序列化&#xff09;以便存儲到 Redis 中&#xff0c;以及從 Redis 中讀取字節流并將其轉換回 Java 對象&#xff08;反序列化&#xff09;。 這是因為在 R…

vLLM服務設置開機自啟動(Linux)

要在開機時進入指定的 conda 環境并啟動此 vllm 服務&#xff0c;您可以通過以下步驟設置一個 systemd 服務來自動執行腳本。 一、第一步&#xff1a;創建一個啟動腳本 1.打開終端并創建啟動腳本&#xff0c;例如 /home/username/start_vllm.sh&#xff08;請替換 username 為…

AI繪畫軟件Stable Diffusion詳解教程(3):Windows系統本地化部署操作方法(通用版)

上一篇教程介紹了如何在本地部署Stable Diffusion專業版&#xff0c;雖然便于技術人員研究&#xff0c;但是普通人使用起來不便捷&#xff0c;每次只能通過cmd窗口的指令形式或者python代碼方式來畫圖&#xff0c;要記很多的指令很繁瑣。 本篇教程教您搭建webui版的&#xff0…

大數據SQL調優專題——調優切入

引入 我們都知道大數據的SQL優化&#xff0c;并非一蹴而就的簡單任務&#xff0c;而是一個涉及多個環節的復雜過程。雖然我們的專欄名字叫大數據SQL調優&#xff0c;但是調優并不是簡單對SQL優化&#xff0c;而是一個涉及多個環節的復雜過程。實際上從需求接入到最終交付&…