徹底搞懂Redis持久化機制,輕鬆應對工作面試

来源:https://www.cnblogs.com/yidengjiagou/archive/2023/04/20/17335884.html
-Advertisement-
Play Games

Redis是基於記憶體存儲的資料庫,如果遇到服務重啟或者崩潰,記憶體中的數據將會被清空。所以為了確保數據安全性和可靠性,我們需要將記憶體中的數據持久化到磁碟上。 持久化不僅可以防止由於系統故障、重啟或者其他原因導致的數據丟失。還可以用於備份、數據恢復和遷移等操作。 ...


image

1. 為什麼要持久化

Redis是基於記憶體存儲的資料庫,如果遇到服務重啟或者崩潰,記憶體中的數據將會被清空。所以為了確保數據安全性和可靠性,我們需要將記憶體中的數據持久化到磁碟上。

持久化不僅可以防止由於系統故障、重啟或者其他原因導致的數據丟失。還可以用於備份、數據恢復和遷移等操作。

2. Redis持久化機制概述

Redis提供了兩種主要的持久化機制:RDB持久化和AOF持久化。此外,還可以採用混合持久化(RDB + AOF)的方式,將這兩種持久化方式結合在一起。下麵我們簡要概述這些持久化機制。

2.1 RDB持久化

RDB(Redis DataBase)持久化是一種基於快照的持久化方式。在指定的時間間隔內,如果滿足一定條件(如某段時間內發生的寫操作次數),Redis會生成一個包含當前記憶體數據的RDB文件。這個RDB文件可以用於數據恢復或備份。RDB持久化提供了較高的數據壓縮率和快速的數據載入速度,但可能存在一定程度的數據丟失。

2.2 AOF持久化

AOF(Append Only File)持久化是一種基於日誌的持久化方式。Redis將所有的寫操作命令記錄到一個AOF文件中。當Redis重新啟動時,可以通過重放AOF文件中的命令來恢複數據。AOF持久化提供了更高的數據安全性,可以保證數據的完整性。然而,與RDB持久化相比,AOF文件通常較大,數據載入速度較慢。

2.3 混合持久化(RDB + AOF)

混合持久化結合了RDB持久化和AOF持久化的優點,可以在保證數據安全性的同時,提供較快的數據載入速度。在這種持久化方式下,Redis會同時生成RDB文件和AOF文件。當Redis重新啟動時,優先使用AOF文件恢複數據,以確保數據的完整性。混合持久化適用於對數據安全性和性能要求較高的場景。

3. RDB持久化

3.1 RDB持久化原理

RDB持久化是基於快照的持久化,把當前時刻全量數據持久化到磁碟上,最終生成一個RBD文件。

3.2 RDB持久化觸發方式

RDB持久化可以通過以下幾種方式觸發:

  1. 手動觸發:使用SAVEBGSAVE命令。SAVE是同步命令,執行過程中會阻塞其他請求。BGSAVE是非同步命令,主進程會forks一個子進程,進行非同步持久化,持久化過程中主進程仍然可以處理其他請求。

  2. 自動觸發:在配置文件中設置觸發條件,redis.conf配置如下:

    # 900s內至少有一次寫操作
    save 900 1
    # 300s內至少有1次寫操作
    save 300 10
    # 60s內至少有10000次寫操作
    save 60 10000
    
  3. 關閉Redis時觸發:Redis在關閉服務時會自動觸發一次RDB持久化。

  4. 主從同步時觸發:當從節點連接到主節點時,主節點會觸發一次RDB持久化,並將生成的RDB文件發送給從節點進行同步。

3.3 RDB持久化優缺點

RDB持久化具有以下優點:

  1. 高性能:由於採用子進程進行磁碟操作,主進程無需進行磁碟IO,保證了Redis的高性能。
  2. 快速恢復:RDB文件包含了某一時刻的完整數據快照,可以快速恢複數據。
  3. 更小的存儲空間:RDB文件經過壓縮,占用較小的磁碟空間。

RDB持久化的缺點包括:

  1. 數據丟失:由於RDB持久化是基於時間間隔的,可能存在一定程度的數據丟失。
  2. 子進程占用記憶體:在生成RDB文件過程中,子進程會占用和主進程相同的記憶體空間,可能導致記憶體不足的問題。

4. AOF持久化

4.1 AOF持久化原理

AOF(Append Only File)持久化是一種基於日誌的持久化方式。Redis將所有的寫操作命令追加到一個AOF文件中。當Redis重新啟動時,可以通過重放AOF文件中的命令來恢複數據。

4.2 AOF持久化配置

AOF持久化的配置主要包括以下幾個方面:

  1. 啟用AOF持久化:在配置文件中設置appendonly yes

    # 開啟aof持久化
    appendonly yes
    
    # aof文件名
    appendfilename "appendonly.aof"
    
  2. AOF文件同步策略:在配置文件中設置appendfsync選項。可選值包括:

    • always:每次寫操作都同步到磁碟,保證最高的數據安全性,但性能較差。
    • everysec:每秒同步一次磁碟,提供較好的數據安全性和性能平衡。
    • no:由操作系統決定何時同步磁碟,性能最好,但數據安全性較差。
    # 持久化策略,always表示每次寫入都進行持久化
    appendfsync always
    
  3. AOF重寫策略:在redis.conf文件中進行配置,控制AOF重寫的觸發條件。

    # 指定在執行BGSAVE或BGREWRITEAOF命令時是否禁用AOF文件同步。預設為yes,表示禁用同步。
    no-appendfsync-on-rewrite yes
    
    # 定AOF文件大小增長到原始大小的百分比時進行重寫。
    # 預設為100,表示AOF文件大小增長到原始大小的兩倍時進行重寫。
    auto-aof-rewrite-percentage 100
    
    # 指定進行AOF重寫的最小AOF文件大小。預設為64mb。
    auto-aof-rewrite-min-size 64
    

4.3 AOF重寫(Rewrite)

隨著寫操作的不斷進行,AOF文件會不斷增長。為了減小AOF文件的大小,Redis提供了AOF重寫功能。AOF重寫會創建一個新的AOF文件,只包含當前記憶體中數據的最小命令集。在重寫過程中,Redis會繼續將新的寫操作追加到原始AOF文件中。當重寫完成後,新的AOF文件將替換原始AOF文件。

可以手動執行bgrewriteaof命令,觸發AOF重寫。

redis> bgrewriteaof

4.4 AOF持久化優缺點

AOF持久化具有以下優點:

  1. 更高的數據安全性:根據同步策略的選擇,AOF持久化可以保證較高的數據安全性。
  2. 更好的容錯性:即使AOF文件存在部分損壞,仍可以恢復大部分數據。

AOF持久化的缺點包括:

  1. 較大的存儲空間:與RDB持久化相比,AOF文件通常較大,占用較多磁碟空間。
  2. 數據載入速度較慢:由於需要重放AOF文件中的命令,數據恢復速度相對較慢。

5. 混合持久化

RDB持久化載入速度快,AOF持久化數據更安全,有沒有一種持久化方式結合兩者的優點?

當然有,就是混合持久化。

5.1 混合持久化原理

Redis首先使用RDB持久化將記憶體中的數據快照存儲到磁碟上,然後再使用AOF持久化將所有新的寫操作追加到AOF文件中。這樣做的好處是:

  1. 在系統崩潰時,可以通過RDB文件進行快速的恢復,而AOF文件可以用於恢復最近的修改。
  2. RDB持久化可以減少AOF文件的大小,從而減少磁碟空間的使用。
  3. 在RDB持久化中,Redis可以使用子進程來將快照寫入磁碟,這樣可以避免主進程的阻塞。

5.2 混合持久化優缺點

混合持久化具有以下優點:

  1. 高數據安全性:結合了AOF持久化的高數據安全性。
  2. 快速恢復:利用RDB持久化的快速數據恢復速度。
  3. 提高從節點同步效率:利用RDB文件進行快速同步。

混合持久化的缺點包括:

較大的存儲空間:需要同時維護RDB文件和AOF文件,可能占用較多的磁碟空間。

5.3 混合持久化應用場景

混合持久化適用於對數據安全性和性能要求較高的場景,尤其是在以下情況:

  1. 需要確保數據完整性,不能容忍數據丟失。
  2. 需要快速恢複數據,以減少故障恢復時間。
  3. 需要提高主從同步效率,以保證高可用性和負載均衡。

6. 持久化方案選擇

6.1 持久化方案對比

持久化方式 RDB AOF
原理 通過定期生成數據快照實現持久化 通過記錄所有寫操作命令實現持久化
數據安全性 可能會丟失最近一次快照以來的數據 更高,可通過配置同步策略降低數據丟失風險
恢復速度 較快,因為RDB文件是一個數據快照 較慢,需要逐條執行AOF文件中的命令
存儲空間 一般較小,因為RDB文件經過壓縮 一般較大,但可以通過AOF重寫減小文件大小
性能影響 較小,因為快照生成過程較短 可能較大,但可通過配置同步策略降低性能影響
主從同步 使用RDB文件進行同步,同步速度較快 使用AOF文件進行同步,同步速度可能較慢
應用場景 適用於對數據安全性要求較低、恢復速度要求較高的場景 適用於對數據安全性要求較高、可接受較慢恢復速度的場景

如果同時開啟了RDB和AOF持久化,Redis優先使用AOF持久化,因為AOF持久化可以保證更高的數據安全性和靈活性,而RDB持久化適用於數據恢復的場景。

6.2 持久化方案選擇

在選擇Redis持久化方案時,需要根據實際業務需求和場景權衡各個方案的優缺點。

  1. 數據安全性要求:如果你的業務對數據安全性要求較高,建議使用AOF持久化或混合持久化。AOF持久化可以通過設置同步策略來保證不同程度的數據安全性。
  2. 數據恢復速度:如果你的業務需要快速恢複數據,以減少故障恢復時間,建議使用RDB持久化或混合持久化。RDB文件包含某一時刻的完整數據快照,可以快速恢複數據。
  3. 存儲空間考慮:如果磁碟空間有限,可以考慮使用RDB持久化,因為RDB文件經過壓縮,占用較小的磁碟空間。然而,如果數據安全性要求較高,可以考慮使用混合持久化,儘管這會增加存儲空間的占用。
  4. 主從同步效率:如果你使用了Redis主從架構,需要考慮主從同步效率。混合持久化可以利用RDB文件進行快速同步,提高從節點的同步效率。
  5. 性能考慮:RDB持久化和混合持久化可以在很大程度上保持Redis的高性能。如果選擇AOF持久化,請選擇合適的同步策略以平衡性能和數據安全性。

7. 總結

本文介紹了Redis的三種持久化機制:RDB持久化、AOF持久化和混合持久化。
RDB持久化通過定期生成數據快照實現持久化,具有快速恢復和更小的存儲空間等優點,但可能存在數據丟失和子進程占用記憶體等缺點。
AOF持久化通過記錄所有寫操作命令實現持久化,具有更高的數據安全性和更好的容錯性等優點,但可能存在較大的存儲空間和數據載入速度較慢等缺點。
混合持久化結合了RDB持久化和AOF持久化的優點,適用於對數據安全性和性能要求較高的場景。
在選擇Redis持久化方案時,需要根據實際業務需求和場景權衡各個方案的優缺點。

我是「一燈架構」,如果本文對你有幫助,歡迎各位小伙伴點贊、評論和關註,感謝各位老鐵,我們下期見

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,刪除文本等等。這也是Vim啟動後的預設模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器預設模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩衝中插入文本。大多數新用戶希望文本編輯器編輯過程中一 ...
  • 1. 數據分組 1.1. SQL的語句中具有分組功能的是GROUP BY和PARTITION BY 1.1.1. 兩者都有數學的理論基礎 1.1.2. 都可以根據指定的列為表分組 1.1.3. 區別僅僅在於,GROUP BY在分組之後會把每個分組聚合成一行數據 1.1.4. GROUP BY的作用是 ...
  • 功能02-商鋪查詢緩存02 知識補充 (1)緩存穿透 https://blog.csdn.net/qq_45637260/article/details/125866738 緩存穿透(cache penetration)是指用戶訪問的數據既不在緩存當中,也不在資料庫中。出於容錯的考慮,如果從底層數據 ...
  • MySQL 中的集群部署方案 前言 MySQL Replication InnoDB Cluster InnoDB ClusterSet InnoDB ReplicaSet MMM MHA Galera Cluster MySQL Cluster MySQL Fabric 參考 MySQL 中的集群 ...
  • 本文分享自天翼雲開發者社區《創建本地yum倉庫》,作者: zzzzgj; 背景 有的部署環境不通外網,但希望繼續使用yum命令下載依賴包而不修改部署腳本邏輯。因此記錄一個本地repo的建立方法。 1、獲取依賴包 # 如在通網的機器上下載openssl-devel所有依賴yumdownloader - ...
  • 我們很高興向大家宣佈,2023年4月14日,Taier 正式發佈 1.4 版本。自2022年2月份 Taier 正式開源以來,收到了很多開發者和行業用戶的積極評價,在諸多生產環境中已得到充分應用。Taier 1.4版本正是吸收了各類實踐經驗及大家的建議,進行了此次迭代優化。 本次更新不僅包含了性能優 ...
  • 摘要:目前TopSQL功能被用戶廣泛使用,是性能定位、劣化分析、審計回溯等重要的基石,為用戶提供覆蓋記憶體、耗時、IO、網路、空間等多方面的監控能力。 本文分享自華為雲社區《GaussDB(DWS)監控工具指南(一)作業級監控TopSQL》,作者:幕後小黑爪 。 1、引言: 監控系統是智能化管理和自動 ...
  • 摘要:近日,中國電子學會科學技術獎勵大會頒發了2021-2022年度中國電子學會科學技術獎獲獎項目,華為雲主導的“GaussDB智能雲原生分散式資料庫”項目榮獲“科技進步一等獎”。 本文分享自華為雲社區《再獲殊榮!華為雲GaussDB喜提“科技進步一等獎”》,作者:GaussDB 資料庫 。 近日, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...