最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中RDB與AOF的區(qū)別及說明

 更新時(shí)間:2025年12月24日 08:56:28   作者:程可愛  
本文詳細(xì)介紹了Redis的兩種主要持久化方式:RDB和AOF,RDB通過快照方式將數(shù)據(jù)保存到磁盤,適合大規(guī)模數(shù)據(jù)的快速恢復(fù),但數(shù)據(jù)一致性較低,AOF通過記錄每次的寫操作,提供高數(shù)據(jù)一致性,但恢復(fù)速度較慢,兩種方式可以結(jié)合使用,RDB作為后備,AOF作為主要持久化方式

1.概述

在Redis的使用中,持久化是一個(gè)重要的特性,它將內(nèi)存中的數(shù)據(jù)保存到硬盤上,以防止數(shù)據(jù)丟失。

Redis 提供了三種主要的持久化方式:AOF(Append Only File)、RDB(Redis DataBase)以及混合持久化(RDB和AOF)。

本文將詳細(xì)介紹 AOF 和 RDB 的區(qū)別及配置方式,幫助讀者更好地理解和選擇合適的持久化方式。

2.RDB和AOF

2.1 RDB

2.1.1 RDB概念

RDB 持久化方式是 Redis 將當(dāng)前內(nèi)存中的數(shù)據(jù)快照(snapshot)保存到硬盤的過程。

這種方式是就是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進(jìn)制文件中,默認(rèn)的文件名為dump.rdb。其實(shí)就是每隔一段時(shí)間,Redis 會(huì)創(chuàng)建一個(gè)代表某一時(shí)刻的數(shù)據(jù)集的磁盤文件。

2.1.2 RDB工作原理(Copy-On-Write)

RDB 的生成過程依賴于操作系統(tǒng)的寫時(shí)復(fù)制(COW)機(jī)制,這一機(jī)制確保了快照生成期間 Redis 依然能正常處理讀寫請求,不會(huì)阻塞業(yè)務(wù)。

具體流程如下:

  • 1.觸發(fā)快照生成:當(dāng)滿足預(yù)設(shè)條件時(shí)(時(shí)間到、達(dá)到修改次數(shù)閾值),Redis 主進(jìn)程會(huì)fork 一個(gè)子進(jìn)程(此時(shí)子進(jìn)程與主進(jìn)程共享同一塊內(nèi)存空間); 
  • 2.子進(jìn)程寫入快照:子進(jìn)程負(fù)責(zé)遍歷內(nèi)存中的所有數(shù)據(jù),將其序列化后寫入一個(gè)臨時(shí)的.rdb 文件; 
  • 3.主進(jìn)程正常服務(wù):在子進(jìn)程生成快照期間,主進(jìn)程繼續(xù)處理客戶端的讀寫請求。若有數(shù)據(jù)被修改,操作系統(tǒng)會(huì)為該數(shù)據(jù)塊創(chuàng)建一個(gè)副本,主進(jìn)程修改副本數(shù)據(jù),而子進(jìn)程依然讀取原始數(shù)據(jù)(避免快照被污染); 
  • 4.替換舊快照:當(dāng)子進(jìn)程完成快照寫入后,會(huì)用臨時(shí)文件替換當(dāng)前的.rdb 文件,至此一次 RDB 持久化完成。

2.1.3 RDB觸發(fā)方式

1.自動(dòng)觸發(fā):基于配置的"指定時(shí)間+修改次數(shù)"

在Redis 的配置文件(redis.conf)中,通過save指令定義RDB的觸發(fā)規(guī)則,格式為:

save <seconds> <changes> [<seconds> <changes> ...]

表示 “在 seconds 秒內(nèi),若數(shù)據(jù)修改次數(shù)達(dá)到 changes 次,則觸發(fā) RDB”。

默認(rèn)配置如下:

# 3600秒(1小時(shí))內(nèi)修改1次、300秒內(nèi)修改100次、60秒內(nèi)修改10000次,滿足任一條件即觸發(fā)RDB
save 3600 1
save 300 100
save 60 10000

2.手動(dòng)觸發(fā):主動(dòng)備份場景

手動(dòng)觸發(fā)主要通過save、bgsave指令實(shí)現(xiàn):

  • save命令:由主進(jìn)程直接生成 RDB,期間會(huì)阻塞所有客戶端請求(線上不推薦使用,會(huì)阻塞請求導(dǎo)致業(yè)務(wù)中斷); 
  • bgsave命令:主進(jìn)程 fork 子進(jìn)程生成 RDB,主進(jìn)程本身不阻塞(線上手動(dòng)觸發(fā)的首選指令)

3.RDB核心配置文件

#指定 RDB 文件的名稱,默認(rèn)為dump.rdb
dbfilename dump.rdb  
#指定 RDB 文件的保存路徑,默認(rèn)是 Redis 的啟動(dòng)目錄(建議改為絕對路徑,如/var/redis/)
dir ./   
#是否對 RDB 文件進(jìn)行壓縮(默認(rèn)開啟,用 CPU 開銷換取磁盤空間,關(guān)閉可提升快照速度)
rdbcompression yes  
#是否對 RDB 文件進(jìn)行校驗(yàn)(默認(rèn)開啟,通過 CRC64 算法確保文件完整性,關(guān)閉可提升加載速度)
rdbchecksum yes  

4.RDB優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 恢復(fù)速度快: RDB 是二進(jìn)制的全量快照,加載時(shí)無需解析復(fù)雜指令,僅需反序列化數(shù)據(jù),適合大規(guī)模數(shù)據(jù)的快速恢復(fù); 
  • 文件體積小: 壓縮后的 RDB文件體積遠(yuǎn)小于 AOF 文件,便于備份和傳輸; 
  • 對性能影響小: 子進(jìn)程負(fù)責(zé)生成快照,主線程僅在fork子進(jìn)程時(shí)短暫阻塞(阻塞時(shí)間與內(nèi)存大小相關(guān),通常毫秒級(jí)),對業(yè)務(wù)讀寫影響低。

缺點(diǎn):

  • 數(shù)據(jù)一致性低: RDB獲取的是“某一時(shí)間點(diǎn)快照”,若在兩次快照間隔期間 Redis 宕機(jī),則該時(shí)間段內(nèi)修改的數(shù)據(jù)將全部丟失(例如:配置save 30 1000,則最多可能丟失30秒的數(shù)據(jù)); 
  • 文件可讀性性低: RDB 文件是一個(gè)二進(jìn)制文件,并不是一個(gè)易于讀取和理解的文本文件; 
  • 不適合實(shí)時(shí)備份: 存在丟失數(shù)據(jù)的可能,適用于對數(shù)據(jù)一致性要求不高的業(yè)務(wù)。

2.2 AOF

2.2.1 AOF概念

AOF其實(shí)就是將每一個(gè)收到的寫命令都通過write函數(shù)追加到文件中,當(dāng) Redis 需要恢復(fù)數(shù)據(jù)時(shí),只需執(zhí)行 AOF 文件中的命令就可以恢復(fù)到原來的狀態(tài)。

這個(gè)文件有點(diǎn)像MySQL的binlog日志文件,只不過binlog日志文件是二進(jìn)制,Redis的AOF生成的文件是文本格式。

2.2.2 AOF工作原理

1.命令追加

  • 每當(dāng) Redis 執(zhí)行一條寫命令并成功處理后,會(huì)將該命令按照 Redis 協(xié)議格式追加到內(nèi)存中的 “AOF 緩沖區(qū)”(避免直接寫入磁盤,降低IO開銷)。 
  • 2.文件刷盤AOF 緩沖區(qū)中的命令需要定期寫入磁盤,刷盤策略由appendfsync配置決定。 

3.日志重寫

  • 隨著運(yùn)行時(shí)間延長,AOF 文件會(huì)產(chǎn)生大量重復(fù)命令(如多次set同一個(gè)key)而變得異常龐大,占用大量磁盤空間,還會(huì)導(dǎo)致Redis重啟恢復(fù)時(shí)間邊長。
  • Redis攜帶了 “日志重寫” 機(jī)制,會(huì)生成一個(gè)包含 “當(dāng)前內(nèi)存數(shù)據(jù)最終狀態(tài)” 的精簡 AOF 文件,替換舊的AOF文件,能有效降低空間占用率、提升恢復(fù)效率。

例如:

  • 若指定key的值經(jīng)過多次set,最終是value3,AOF文件中記錄了SET key value1、SET key
  • value2、SET key value3三條命令,重寫后只會(huì)保留SET key value3一條命令。

2.2.3 AOF配置

1.啟用AOF

# 啟用AOF(默認(rèn)no)
appendonly yes  
# AOF文件名稱,默認(rèn)appendonly.aof
appendfilename "appendonly.aof" 
# AOF文件保存路徑,與RDB一致
dir ./  

2.刷盤策略

appendfsync定義了 AOF 緩沖區(qū)的命令何時(shí)寫入磁盤,有三種可選值:

解釋
always每執(zhí)行一條寫命令,立即將緩沖區(qū)內(nèi)容寫入到磁盤,數(shù)據(jù)安全性高,IO頻繁
everysec每秒將緩沖區(qū)內(nèi)容寫入磁盤一次,數(shù)據(jù)安全性一般,性能適中
no由操作系統(tǒng)決定何時(shí)寫入磁盤,默認(rèn)30秒刷盤一次,數(shù)據(jù)安全性低,性能較高

3.日志重寫規(guī)則

AOF 重寫同樣支持自動(dòng)觸發(fā)和手動(dòng)觸發(fā),自動(dòng)觸發(fā)通過auto-aof-rewrite-percentage和auto-aof-rewrite-min-size配置實(shí)現(xiàn):

auto-aof-rewrite-percentage 100  # 當(dāng)AOF文件大小比上次重寫后增大100%(即翻倍)時(shí)觸發(fā)
auto-aof-rewrite-min-size 64mb   # 當(dāng)AOF文件大小至少達(dá)到64MB時(shí)才觸發(fā)(避免小文件頻繁重寫)

手動(dòng)觸發(fā):執(zhí)行bgrewriteaof命令,主進(jìn)程 fork 子進(jìn)程完成重寫,不阻塞業(yè)務(wù)(和bgsave類似)。

4.AOF優(yōu)缺點(diǎn) 

優(yōu)點(diǎn):

  • 數(shù)據(jù)一致性高: 可通過appendfsync always實(shí)現(xiàn) “數(shù)據(jù)零丟失”,或everysec實(shí)現(xiàn) “最多丟失 1 秒數(shù)據(jù)”,滿足高一致性需求; 
  • 日志可讀性強(qiáng): 由于AOF 文件是一個(gè)易于讀取和理解的文本文件,可以方便地進(jìn)行數(shù)據(jù)恢復(fù)、備份和分析; 
  • 可靠性高: 記錄了Redis執(zhí)行的所有寫操作,可以提供更可靠的數(shù)據(jù)持久性,避免數(shù)據(jù)丟失。

缺點(diǎn):

  • 恢復(fù)速度慢: 恢復(fù)數(shù)據(jù)時(shí)需要執(zhí)行大量的寫命令,因此恢復(fù)速度相對較慢; 
  • 文件體積大: 即使經(jīng)過重寫,AOF 文件體積通常仍大于 RDB 文件,占用更多磁盤空間; 
  • 性能開銷較高: 每次寫操作都需要追加到 AOF 文件中,可能會(huì)導(dǎo)致磁盤 I/O 的負(fù)載增加。

2.3 RDB與AOF對比

RDBAOF
優(yōu)點(diǎn)文件體積小,恢復(fù)速度相對較快,對系統(tǒng)性能影響較小可讀性高,數(shù)據(jù)安全性高,支持實(shí)時(shí)恢復(fù)
缺點(diǎn)數(shù)據(jù)安全性相對較低,可讀性低,無法滿足大規(guī)模、對數(shù)據(jù)備份要求高的場景文件體積較大,恢復(fù)速度相對較慢,對系統(tǒng)性能有一定影響
適用場景對數(shù)據(jù)安全性要求相對較低,希望快速地進(jìn)行數(shù)據(jù)恢復(fù)對數(shù)據(jù)安全性要求較高,而且可以接受稍慢一些的恢復(fù)速度

3.總結(jié)

1.RDB持久化方式能夠在指定的時(shí)間間隔內(nèi)對數(shù)據(jù)進(jìn)行快照存儲(chǔ);

2.AOF持久化方式記錄每次對服務(wù)器寫的操作,服務(wù)器重啟時(shí)會(huì)重新執(zhí)行這些命令來恢復(fù)原始的數(shù)據(jù);

3.RDB和AOF可同時(shí)開啟,Redis重啟時(shí)會(huì)優(yōu)先載入AOF文件來恢復(fù)原始數(shù)據(jù),因?yàn)橥ǔG闆r下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整;

4.一般情況下,RDB文件只用作后備用途,建議只在slave機(jī)器上持久化RDB文件,并且只要15分鐘備份一次就夠了;

5.如果只做緩存,只希望數(shù)據(jù)在服務(wù)器運(yùn)行的時(shí)候存在,其實(shí)不需要持久化操作。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis快速部署為docker容器的方法實(shí)現(xiàn)

    redis快速部署為docker容器的方法實(shí)現(xiàn)

    部署 Redis 作為 Docker 容器是一種快速、靈活且可重復(fù)使用的方式,特別適合開發(fā)、測試和部署環(huán)境,本文主要介紹了redis快速部署為docker容器的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 淺談Redis批量刪除的大坑

    淺談Redis批量刪除的大坑

    本文詳細(xì)剖析了Redis批量刪除鍵時(shí)可能引發(fā)的性能問題及解決方案,通過分析常見的批量刪除方法(如KEYS+DEL、SCAN+DEL、UNLINK)的的優(yōu)缺點(diǎn),提出了改進(jìn)方案,希望幫助大家在實(shí)際業(yè)務(wù)中有效規(guī)避Redis批量刪除鍵的風(fēng)險(xiǎn)
    2026-05-05
  • 一文詳解如何使用Redis實(shí)現(xiàn)分布式鎖

    一文詳解如何使用Redis實(shí)現(xiàn)分布式鎖

    這篇文章主要介紹了一文詳解如何使用Redis實(shí)現(xiàn)分布式鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄的示例代碼

    Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄的示例代碼

    本文主要介紹了基于Redis如何實(shí)現(xiàn)短信驗(yàn)證碼登錄功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Session是客戶端與服務(wù)器通訊會(huì)話跟蹤技術(shù),服務(wù)器與客戶端保持整個(gè)通訊的會(huì)話基本信息。本文主要介紹了Redis快速實(shí)現(xiàn)分布式session的方法,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • Redis有序集合類型的常用命令小結(jié)

    Redis有序集合類型的常用命令小結(jié)

    這篇文章先是給大家簡單介紹了一下有序集合類型,然后詳細(xì)整理了關(guān)于Redis有序集合類型的常用命令,通過整理的這些命令相信會(huì)給大家的工作或?qū)W習(xí)帶來一定的幫助,有需要的朋友們下面來一起看看吧。
    2016-09-09
  • Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵

    Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵

    本文主要介紹了Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 最新評論

    芦山县| 灵寿县| 西乌珠穆沁旗| 仁怀市| 郁南县| 新竹市| 章丘市| 蒲江县| 尉犁县| 长春市| 盐亭县| 名山县| 禹城市| 永新县| 资源县| 抚远县| 庆元县| 阳城县| 嘉峪关市| 新竹市| 尼玛县| 麻栗坡县| 华阴市| 平邑县| 泗洪县| 麻阳| 昭通市| 始兴县| 凤台县| 温泉县| 南开区| 汶川县| 灯塔市| 峨眉山市| 广州市| 涟水县| 民丰县| 平潭县| 宜兰县| 克什克腾旗| 新泰市|