Redis學習打卡-Day5-Redis 持久化

單點 Redis 的一些問題
  • 數據丟失:Redis 是內存存儲,服務重啟可能會丟失數據。solution:實現 Redis 數據持久化
  • 并發能力:單節點 Redis 并發能力雖然不錯,但也無法滿足如618這樣的高并發場景。solution:搭建主從集群,實現讀寫分離。
  • 故障恢復:如果 Redis 宕機,則服務不可用,需要一種自動的故障恢復手段。solution:哨兵機制,實現健康檢測及自動恢復。
  • 存儲能力:Redis 基于內存,單節點能存儲的數據量難以滿足海量數據需求。solution:搭建分片集群,利用插槽機制實現動態擴容。

Redis 持久化

  • 使用緩存的時候,我們經常需要對內存中的數據進行持久化也就是將內存中的數據寫入到硬盤中。大部分原因是為了之后重用數據(比如重啟機器、機器故障之后恢復數據),或者是為了做數據同步(比如 Redis 集群的主從節點通過 RDB 文件同步數據)。
  • Redis 不同于 Memcached 的很重要一點就是,Redis 支持持久化,而且支持 3 種持久化方式:快照(snapshotting,RDB、只追加文件(append-only file, AOF)、以及RDB 和 AOF 的混合持久化(Redis 4.0 新增)。

1.RDB

  • RDB 全稱 Redis Database Backup file(Redis數據備份文件),也被叫做 Redis 數據快照。
  • 簡單來說就是把內存中某個時間點的所有數據都記錄到磁盤中。當 Redis 實例故障重啟后,從磁盤讀取快照文件,恢復數據。快照文件稱為 RDB 文件,默認是保存在當前運行目錄。
執行 RDB
  • 誰來執行?
    • save 命令:由 Redis 主進程來執行 RDB,會阻塞所有命令。
    • bgsave 命令:開啟子進程執行 RDB,避免主進程受到影響。默認選項。
      • bgsave 開始時會 fork 主進程得到子進程,子進程共享主進程的內存數據。完成 fork 后讀取內存數據并寫入新的 RDB 文件替換舊的。
      • fork 采用的是 copy-on-write 技術:當主進程執行讀操作時,訪問共享內存;當主進程執行寫操作時,則會拷貝一份數據,執行寫操作。 bgsave
  • 何時執行?
    • Redis 停機時會自動執行一次 RDB。
    • Redis 內部有觸發 RDB 的機制,可以在 redis.conf 文件中找到,如:save 900 1 表示900秒內,如果至少有1個 key 被修改,則執行bgsave
    • save "" 則表示禁用 RDB。
RDB 缺點
  • RDB 執行間隔時間長,兩次 RDB 之間去寫入數據有丟失的風險。
  • fork 子進程、壓縮、寫出 RDB 文件都比較耗時。

2.AOF

  • AOF 全稱 Append Only File(追加文件)。Redis 處理的每一個寫命令,都會將該命令寫入到 AOF 緩沖區中,然后再寫入AOF 文件,可以看做是命令日志文件。
執行 AOF
  • 執行流程?

    • 命令追加(append):所有的寫命令會追加到 AOF 緩沖區中。
    • 文件寫入(write):將 AOF 緩沖區的數據寫入到 AOF 文件中。這一步需要調用write函數(系統調用),write將數據寫入到了系統內核緩沖區之后直接返回了(延遲寫)。注意!!!此時并沒有同步到磁盤。
    • 文件同步(fsync):AOF 緩沖區根據對應的持久化方式( fsync 策略)向硬盤做同步操作。這一步需要調用 fsync 函數(系統調用), fsync 針對單個文件操作,對其進行強制硬盤同步,fsync 將阻塞直到寫入磁盤完成后返回,保證了數據持久化。
    • 文件重寫(rewrite):隨著 AOF 文件越來越大,需要定期對 AOF 文件進行重寫,達到壓縮的目的。
    • 重啟加載(load):當 Redis 重啟時,可以加載 AOF 文件進行數據恢復。
      AOF執行流程
  • 誰來執行?

    • AOF 默認是關閉的。需要修改 redis.conf 配置文件來開啟 AOF。 AOF 默認
  • 何時執行?

    • AOF 的命令記錄頻率也可以通過 redis.conf 文件來配置。默認每隔一秒記錄一次。
      命令記錄頻率
      命令記錄頻率參數
AOF 自動重寫功能
  • AOF 重寫(rewrite) 是一個有歧義的名字,該功能是通過讀取數據庫中的鍵值對來實現的,程序無須對現有 AOF 文件進行任何讀入、分析或者寫入操作。
  • 因為記錄的是命令,AOF 文件會比 RDB 文件大的多。而且AOF會記錄對同一個key的多次寫操作,但只有最后一次寫操作才有意義。通過執行 bgrewriteaof 命令,可以讓AOF文件執行重寫功能,用最少的命令達到相同效果。
  • AOF 文件重寫期間,Redis 還會維護一個 AOF 重寫緩沖區,該緩沖區會在子進程創建新 AOF 文件期間,記錄服務器執行的所有寫命令。當子進程完成創建新 AOF 文件的工作之后,服務器會將重寫緩沖區中的所有內容追加到新 AOF 文件的末尾,使得新的 AOF 文件保存的數據庫狀態與現有的數據庫狀態一致。最后,服務器用新的 AOF 文件替換舊的 AOF 文件,以此來完成 AOF 文件重寫操作。
  • Redis 也會在觸發閾值時自動去重寫 AOF 文件。值也可以在redis.conf中配置。
    在這里插入圖片描述
AOF 為什么是在執行完命令之后記錄日志?
  • 避免額外的檢查開銷,AOF 記錄日志不會對命令進行語法檢查;
  • 在命令執行完之后再記錄,不會阻塞當前的命令執行。
  • 這樣也帶來了風險:
    • 如果剛執行完命令 Redis 就宕機會導致對應的修改丟失;
    • 可能會阻塞后續其他命令的執行(AOF 記錄日志是在 Redis 主線程中進行的)。
AOF 校驗機制
  • 純 AOF 模式下,Redis 通過逐條解析文件中的命令來驗證文件的有效性。
  • 在 混合持久化模式(Redis 4.0 引入)下,AOF 文件由兩部分組成:
    • RDB 快照部分:文件以固定的 REDIS 字符開頭,存儲某一時刻的內存數據快照,并在快照數據末尾附帶一個 CRC64 校驗和(位于 RDB 數據塊尾部、AOF 增量部分之前)。
    • AOF 增量部分:緊隨 RDB 快照部分之后,記錄 RDB 快照生成后的增量寫命令。這部分增量命令以 Redis 協議格式逐條記錄,無整體或全局校驗和。
  • Redis 啟動并加載 AOF 文件時,首先會校驗文件開頭 RDB 快照部分的數據完整性,即計算該部分數據的 CRC64 校驗和,并與緊隨 RDB 數據之后、AOF 增量部分之前存儲的 CRC64 校驗和值進行比較。如果 CRC64 校驗和不匹配,Redis 將拒絕啟動并報告錯誤。
  • RDB 部分校驗通過后,Redis 隨后逐條解析 AOF 部分的增量命令。如果解析過程中出現錯誤(如不完整的命令或格式錯誤),Redis 會停止繼續加載后續命令,并報告錯誤,但此時 Redis 已經成功加載了 RDB 快照部分的數據

RDB 與 AOF

  • RDB 和 AOF 各有自己的優缺點。
     RDB 與 AOF
  • 如何選擇?
    • 如果 Redis 保存的數據丟失一些也沒什么影響的話,可以選擇使用 RDB。
    • 不建議單獨使用 AOF,因為時不時地創建一個 RDB 快照可以進行數據庫備份、更快的重啟以及解決 AOF 引擎錯誤。
    • 如果數據要求的安全性比較高的話,建議同時開啟 RDB 和 AOF 持久化或者開啟 RDB 和 AOF 混合持久化。

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

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

相關文章

飛書知識問答深度體驗:企業AI應用落地的典范產品

飛書知識問答深度體驗:企業AI應用落地的典范產品 產品介紹-飛書知識問答是什么與常規通用大模型相比有何優點?大模型橫行的時代,飛書知識問答對普通人和企業有何影響呢? 場景示例-不同角色可以用飛書知識問答做什么?對…

Python打卡訓練營學習記錄Day34

知識點回歸: CPU性能的查看:看架構代際、核心數、線程數 GPU性能的查看:看顯存、看級別、看架構代際 GPU訓練的方法:數據和模型移動到GPU device上 類的call方法:為什么定義前向傳播時可以直接寫作self.fc1(x) CPU性…

Django的請求和響應+template模板

🌟 如果這篇文章觸動了你的心弦,請不要吝嗇你的支持! 親愛的讀者, 感謝你花時間閱讀這篇分享。希望這里的每一個字都能為你帶來啟發或是讓你會心一笑。如果你覺得這篇文章有價值,或者它解決了你一直以來的一個疑問&a…

Python |GIF 解析與構建(2):狀態機解析

Python |GIF 解析與構建(2):狀態機解析 目錄 Python |GIF 解析與構建(2):狀態機解析 引言 一、狀態機概述 狀態機的優勢與改進方向 總結 引言 在《Python |GIF 解…

PCB設計實踐(二十六)貼片電容與插件電容的全面解析:差異、演進與應用場景

一、核心差異:結構與性能對比 物理結構與封裝形式 貼片電容(Surface Mount Device, SMD)采用扁平化設計,外形多為長方體或圓柱體,直接通過焊盤固定在電路板表面。其封裝材料通常為陶瓷、聚合物或鋁電解層,外…

XC7A200T-2FFG1156I FPGA AMD Xilinx Artix-7

XC7A200T-2FFG1156I 是 AMD Xilinx Artix-7 系列的一款高性能低功耗 FPGA,采用 28 nm 高性能低功耗(HPL)工藝制造,核心電壓在 0.95 V–1.05 V 之間,可在 –40 C 至 100 C 工業溫度范圍內穩定工作 。 邏輯資源&#xff…

LVS + Keepalived + Nginx 高可用負載均衡系統實驗

1. 項目背景 在現代 Web 應用中,高可用性和負載均衡是至關重要的需求。本項目旨在通過 LVS(Linux Virtual Server)實現流量分發,通過 Keepalived 實現高可用性,通過 Nginx 提供后端服務。該架構能夠確保在單點故障的情…

window 顯示驅動開發-視頻內存供應和回收(一)

Windows 顯示驅動程序模型 (WDDM) 1.2 及更高版本用戶模式顯示驅動程序必須使用內存套餐和回收功能(從Windows 8開始提供),以減少本地內存和系統內存中臨時表面所需的內存開銷。 最低 WDDM 版本:1.2 最低 Windows 版本&#xff…

什么是VR場景?VR與3D漫游到底有什么區別

在數字化時代,虛擬現實(Virtual Reality, 簡稱VR)場景與3D漫游作為兩種前沿技術,改變著人們的生活方式和體驗模式。通過計算機模擬真實或假想的場景,讓用戶仿佛身臨其境,并能與虛擬環境進行互動。盡管VR場景…

JAVA查漏補缺(2)

AJAX 什么是Ajax Ajax(Asynchronous Javascript And XML),即是異步的JavaScript和XML,Ajax其實就是瀏覽器與服務器之間的一種異步通信方式 異步的JavaScript 它可以異步地向服務器發送請求,在等待響應的過程中&…

客服中心大模型應用演進路線:從傳統服務到超級智能助手的轉型

客服中心作為企業與客戶溝通的重要橋梁,近年來經歷了從人工服務到人工智能驅動的深刻變革。本文基于"客服中心大模型應用演進路線圖",詳細解析客服中心從傳統模式向AI驅動智能服務的轉型歷程,剖析每個發展階段的特點、應用場景及關…

使用 OpenCV 實現“隨機鏡面墻”——多鏡片密鋪的哈哈鏡效果

1. 引言 “哈哈鏡”是一種典型的圖像變形效果,通過局部鏡面反射產生扭曲的視覺趣味。在計算機視覺和圖像處理領域,這類效果不僅有趣,還能用于藝術創作、交互裝置、視覺特效等場景。 傳統的“哈哈鏡”往往是針對整張圖像做某種鏡像或扭曲變換…

Python訓練營打卡——DAY33(2025.5.22)

目錄 簡單的神經網絡 一、PyTorch的安裝 二、準備工作 三、數據的準備 四、模型架構定義 五、模型訓練(CPU版本) 1. 定義損失函數和優化器 2. 開始循環訓練 3. 可視化結果 六、通俗解釋 1. 環境安裝(相當于買鍋碗瓢盆)…

目標檢測 Lite-DETR(2023)詳細解讀

文章目錄 迭代高級特征跨尺度融合高效的低層次特征跨尺度融合KDA:Key-aware Deformable Attention 論文翻譯: CVPR 2023 | Lite DETR:計算量減少60%!高效交錯多尺度編碼器-CSDN博客 DINO團隊的 (Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作為當前最流行的開源搜索和分析引擎,廣泛應用于日志分析、全文搜索、業務智能等領域。Elasticsearch是一個基于 Apache Lucene 構建的分布式搜索和分析引擎、可擴展數據存儲和矢量數據庫。它針對生產級工作負載的速度和相關性進行了優化。使用 Elasti…

當物聯網“芯”闖入納米世界:ESP32-S3驅動的原子力顯微鏡能走多遠?

上次咱們把OV2640攝像頭“盤”得明明白白,是不是感覺ESP32-S3這小東西潛力無限?今天,咱們玩個更刺激的,一個聽起來就讓人腎上腺素飆升的挑戰——嘗試用ESP32-S3這顆“智慧芯”,去捅一捅科學界的“馬蜂窩”,…

Excel合并單元格后,如何自動批量生成序號列

1.選擇整列 2.組合鍵:CtrlG 3.定位條件,選擇“空值” 4.在第一個框中輸入“MAX(”,鼠標選中A1框,后加“:”,鼠標選中前方“A1”,按“F4”絕對引用,補全右括號,后輸入“1…

TDengine 運維—容量規劃

概述 若計劃使用 TDengine 搭建一個時序數據平臺,須提前對計算資源、存儲資源和網絡資源進行詳細規劃,以確保滿足業務場景的需求。通常 TDengine 會運行多個進程,包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在這些進程…

Axure設計數字鄉村可視化大屏:從布局到交互的實戰經驗分享

鄉村治理正從傳統模式向“數據驅動”轉型。數字鄉村可視化大屏作為數據展示的核心載體,不僅能直觀呈現鄉村發展全貌,還能為決策提供科學依據。本文以Axure為工具,結合實際案例,分享如何從零設計一個功能完備、交互流暢的數字鄉村大…

從零基礎到最佳實踐:Vue.js 系列(1/10):《環境搭建與基礎概念》

Vue.js 環境搭建與基礎概念 關鍵點 Vue.js 是一個簡單易用的前端框架,適合初學者快速上手。搭建開發環境需要安裝 Node.js 和 npm/Yarn,推薦使用最新 LTS 版本。Vue CLI 是官方工具,可快速創建項目并提供開發服務器。Vue.js 基于 MVVM 模式&…