Redis持久化AOF和RDB的詳細闡述

一、Redis持久化AOF和RDB的區別

Redis持久化AOF和RDB都是Redis的持久化機制,但它們的實現方式、特點和適用場景都不同。

RDB是指Redis Database,在指定的時間間隔內將內存中的數據集快照寫入磁碟。RDB採用一種壓縮格式將當前進程數據狀態寫入磁碟。它避免了AOF中的多次寫入操作,保證了數據的實時性與可靠性,同時還能節省磁碟空間和寫入時間。但因為只保存Redis在某個時間點上的數據狀態,如果在該時間點之後出現宕機,那麼此時數據就無法恢復了。

AOF是指Append Only File,其具有持久化更新的特點,每秒鐘將執行過的命令追加到名為appendonly.aof的文件中,以此來記錄Redis的操作。在數據備份方面,AOF提供了更加可靠的數據備份,對於需要數據完整性的場合尤其重要。但同時也使得AOF文件的大小比RDB文件更大,每秒鐘追加操作會對磁碟I/O產生巨大影響。


#RDB持久化
save 900 1         #900秒內進行過一次寫入操作,就自動備份
save 300 10        #300秒內進行過10次寫入操作,就自動備份
save 60 10000      #60秒內進行過10000次寫入操作,就自動備份
 
#AOF持久化
appendonly yes     #開啟AOF持久化
appendfilename "appendonly.aof"   #AOF文件名

二、Redis持久化AOF和RDB混合使用

Redis官方推薦AOF和RDB相結合的方式進行持久化,以充分發揮它們各自的優勢。

當Redis關機時,首先會檢測AOF文件是否存在,若存在,則會根據AOF文件重新構建資料庫,因為AOF的數據一般比RDB的數據完整性更高。如果AOF文件不存在或者AOF文件損壞,Redis會檢查是否存在RDB快照,如果存在,則會將RDB的數據載入到內存中。

當Redis運行時,通過設置redis.conf中的aof-use-rdb-preamble yes,使得在AOF重寫過程中,寫入一條磁碟快照信息(RDB Header) ,這樣在AOF 文件重寫恢復時,會使用磁碟快照中的數據替換原有 RDB文件載入的數據,這種方式克服了 AOF文件中數據可能不完整的問題。


aof-use-rdb-preamble yes  #重寫AOF文件同時寫入RDB文件的內容

三、Redis持久化RDB和AOF

Redis官方提供了兩種Redis數據持久化的方式:

(1)RDB快照:以指定間隔時間非同步地將內存中的數據寫入到硬碟中,遵循「寫時複製」的策略,過程中不會停止資料庫的服務,且持久化的文件名為 dump.rdb。RDB的優點是實現簡單,佔用資源小且數據更加的緊湊,但缺點是無法保留持久化期間的狀態。

(2)AOF日誌:以追加的方式將伺服器執行的命令寫入到日誌文件中去。當Redis重啟時,將根據日誌文件中的命令重新執行一遍,從而達到恢複數據的目的。AOF的優點是能夠非常可靠的保證數據的完整性,但其缺點是佔用空間大,重啟速度慢等問題。


#RDB持久化
save 900 1         #900秒內進行過一次寫入操作,就自動備份
save 300 10        #300秒內進行過10次寫入操作,就自動備份
save 60 10000      #60秒內進行過10000次寫入操作,就自動備份
 
#AOF持久化
appendonly yes     #開啟AOF持久化
appendfilename "appendonly.aof"   #AOF文件名

四、Redis資料庫數據持久化有哪些方式

除了上述提到的RDB和AOF,Redis資料庫還有以下幾種持久化方式:

(1)無持久化:默認情況下Redis並不使用任何形式的持久化,僅僅依靠內存來保存數據。當Redis重啟時,所有數據都將丟失。

(2)只使用RDB:將持久化方式設置為「只使用RDB」的情況下,Redis不會在任何時候將數據寫入到AOF文件中,僅通過RDB將內存中的資料庫狀態保存下來。

(3)只使用AOF:將持久化方式設置為「只使用AOF」的情況下,Redis只會將執行的寫操作記錄到AOF文件中,而不是存儲在內存里。在Redis重啟的情況下,可以根據AOF文件中的記錄來重構整個資料庫,以恢複寫操作的狀態。

(4)RDB和AOF混合使用:Redis建議將持久化方式設置為「RDB和AOF的混合使用」,這樣Redis可以同時獲得二者的優點,具有較高的數據完整性和高效的性能表現。


#設置持久化方式為RDB
save ""

#設置持久化方式為AOF
appendonly yes

#設置持久化方式為RDB和AOF混合使用
save 900 1         #900秒內進行過一次寫入操作,就自動備份
save 300 10        #300秒內進行過10次寫入操作,就自動備份
save 60 10000      #60秒內進行過10000次寫入操作,就自動備份
appendonly yes
appendfilename "appendonly.aof"

五、Redis持久化AOF

AOF(Archiver on File)是一種持久化策略,將Redis的命令追加到磁碟上的AOF文件中。目標是使用AOF文件記錄所有的寫操作(讀操作不會記錄),並通過讀取AOF文件來完成數據恢復。

配置Redis將AOF保持在何時重寫初始文件中,Redis使用AOF文件記錄每個寫命令,並以append(附加)方式將所有數據寫入AOF文件中。AOF默認情況下以同步的方式工作,這意味著每個Redis寫命令將被同步寫到硬碟。這種方式通常是非常慢的,並且特別容易導致數據丟失.

Redis AOF提供了兩種不同的寫入策略,以解決上述同步寫入的性能問題:

1. always:Redis在每個寫操作後同步AOF文件。

2. everysec:Redis在每秒同步AOF文件以避免過多的操作系統調用。


#默認以always方式進行AOF持久化
appendfsync always

#設置以everysec方式進行AOF持久化
appendfsync everysec

六、Redis AOF

Redis AOF並不是Redis的獨立成員,它僅僅是關鍵的數據持久化策略之一。Redis通過不同的配置選項,使操作人員能夠找到最佳的Redis數據持久化策略。

啟用AOF:默認情況下Redis使用no將AOF禁用,必須啟用才能使用AOF數據持久化功能


appendonly yes

七、Redis的持久化

Redis持久化是保證Redis數據可靠性的一種方式,同時避免因為進程意外終止等原因造成數據的丟失。Redis將當前內存中的數據狀態寫入到磁碟上,並在Redis重啟時能夠通過載入磁碟數據重新構建內存中的資料庫狀態,以達到持久化目的。


#開啟RDB持久化
save 900 1         
save 300 10        
save 60 10000      
 
#開啟AOF持久化
appendfsync always   

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/233586.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 17:09
下一篇 2024-12-11 17:09

相關推薦

  • 在CentOS上安裝Redis

    Redis是一款非關係型資料庫,它支持多種數據結構,包括字元串、哈希、列表、集合、有序集合等。Redis運行內存內並且支持數據持久化,它還可以應用於緩存、消息隊列等場景。本文將介紹…

    編程 2025-04-28
  • ORM持久層

    ORM(對象關係映射)是一種編程技術,它將面向對象的編程語言中的對象與關係型資料庫中的表進行映射。通過ORM,我們可以用面向對象的方式操作資料庫,減少了手寫SQL語句的複雜度以及對…

    編程 2025-04-28
  • 解析spring.redis.cluster.max-redirects參數

    本文將圍繞spring.redis.cluster.max-redirects參數進行詳細闡述,從多個方面解讀它的意義與作用,並給出相應的代碼示例。 一、基礎概念 在介紹sprin…

    編程 2025-04-27
  • Redis Bitmap用法介紹

    Redis是一款高性能的內存資料庫,支持多種數據類型,其中之一便是bitmap。Redis bitmap(點陣圖)是一種用二進位位來表示元素是否在集合中的數據結構。由於使用了二進位位…

    編程 2025-04-27
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作資料庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25

發表回復

登錄後才能評論