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

解讀Redis的持久化方式(RDB、AOF)

 更新時(shí)間:2026年04月01日 10:44:07   作者:大手你不懂  
文章主要介紹了Redis的RDB和AOF兩種持久化機(jī)制的區(qū)別、工作原理和優(yōu)點(diǎn),并詳細(xì)講解了Redis 4.0+版本中RDB+AOF混合持久化的實(shí)現(xiàn)方式、配置建議和實(shí)際應(yīng)用,強(qiáng)調(diào)了混合持久化在生產(chǎn)環(huán)境中的重要性和配置要點(diǎn),以及在不同場(chǎng)景下的推薦配置策略

一、核心概念回顧

RDB vs AOF 對(duì)比

特性RDB (快照)AOF (日志)
原理定時(shí)全量快照記錄每條寫(xiě)命令
文件格式二進(jìn)制 (.rdb)文本日志 (.aof)
文件大小
恢復(fù)速度快 (直接加載)慢 (重放命令)
數(shù)據(jù)完整性可能丟失快照間數(shù)據(jù)可做到秒級(jí)甚至實(shí)時(shí)
性能影響快照時(shí) fork 子進(jìn)程持續(xù)寫(xiě)磁盤(pán),有開(kāi)銷

二、同時(shí)開(kāi)啟 RDB+AOF 的工作機(jī)制

1. 寫(xiě)入流程(雙寫(xiě)機(jī)制)

┌─────────────────────────────────────────────────────────────────┐
│                    Redis 寫(xiě)操作流程                              │
└─────────────────────────────────────────────────────────────────┘
?
        寫(xiě)命令 (SET/DEL/HSET...)
                ↓
        ┌───────────────┐
        │   內(nèi)存數(shù)據(jù)     │ ← 立即執(zhí)行
        └───────┬───────┘
                │
        ┌───────┴───────┐
        ↓               ↓
┌──────────────┐  ┌──────────────┐
│    RDB 快照   │  │    AOF 日志   │
│ (定時(shí)觸發(fā))    │  │  (實(shí)時(shí)追加)   │
│ .rdb 文件     │  │  .aof 文件    │
└──────────────┘  └──────────────┘

關(guān)鍵點(diǎn)

  • RDB:按配置的時(shí)間間隔觸發(fā)(如 900 秒有 1 次修改)

  • AOF:每條寫(xiě)命令都記錄(根據(jù) fsync 策略決定何時(shí)落盤(pán))

2. 混合持久化(Redis 4.0+ 核心特性)

這是最重要的配置!Redis 4.0 引入了 AOF-RDB 混合持久化:

┌─────────────────────────────────────────────────────────────────┐
│                    混合持久化文件格式                            │
└─────────────────────────────────────────────────────────────────┘
?
appendonly.aof 文件結(jié)構(gòu):
┌─────────────────────────────────────────────────────────────────┐
│  頭部:RDB 格式快照數(shù)據(jù) (全量數(shù)據(jù))                               │
│  ─────────────────────────────────────────────────────────────  │
│  尾部:AOF 格式增量命令 (RDB 之后的寫(xiě)操作)                        │
│  ─────────────────────────────────────────────────────────────  │
│  結(jié)尾:EOF 標(biāo)記                                                  │
└─────────────────────────────────────────────────────────────────┘
?
優(yōu)勢(shì):
? 恢復(fù)時(shí)先加載 RDB 快照(快)
? 再重放少量 AOF 增量命令(數(shù)據(jù)完整)
? 兼顧速度和完整性

配置項(xiàng)

# redis.conf
aof-use-rdb-preamble yes    # 開(kāi)啟混合持久化(Redis 4.0+ 默認(rèn)開(kāi)啟)

3. AOF 重寫(xiě)時(shí)的混合機(jī)制

AOF 文件會(huì)越來(lái)越大,需要定期重寫(xiě)(Rewrite):

┌─────────────────────────────────────────────────────────────────┐
│                    AOF 重寫(xiě)流程                                  │
└─────────────────────────────────────────────────────────────────┘
?
重寫(xiě)前 appendonly.aof:
┌─────────────────────────────────────────────────────────────────┐
│ RDB 快照 │ SET k1 v1 │ SET k1 v2 │ DEL k1 │ SET k2 v2 │ ...     │
│ (舊數(shù)據(jù)) │ (重復(fù)命令很多,文件膨脹)                               │
└─────────────────────────────────────────────────────────────────┘
                          ↓ BGREWRITEAOF 觸發(fā)
重寫(xiě)后 appendonly.aof:
┌─────────────────────────────────────────────────────────────────┐
│      RDB 快照 (當(dāng)前最新數(shù)據(jù))      │  SET k2 v2  │  (增量命令)    │
│      (緊湊二進(jìn)制)                │  (少量新命令)                 │
└─────────────────────────────────────────────────────────────────┘
?
結(jié)果:
? 文件體積大幅減小
? 恢復(fù)速度更快
? 數(shù)據(jù)不丟失

三、重啟恢復(fù)優(yōu)先級(jí)

恢復(fù)順序規(guī)則

┌─────────────────────────────────────────────────────────────────┐
│                    Redis 重啟恢復(fù)流程                            │
└─────────────────────────────────────────────────────────────────┘
?
                    Redis 啟動(dòng)
                        ↓
            ┌───────────────────────┐
            │  檢查持久化文件是否存在  │
            └───────────┬───────────┘
                        │
        ┌───────────────┼───────────────┐
        ↓               ↓               ↓
   ┌─────────┐    ┌─────────┐    ┌─────────┐
   │ AOF 存在 │    │ 僅 RDB  │    │ 都無(wú)    │
   └────┬────┘    └────┬────┘    └────┬────┘
        │              │              │
        ↓              ↓              ↓
   優(yōu)先用 AOF     用 RDB 恢復(fù)    空數(shù)據(jù)庫(kù)
   (數(shù)據(jù)更完整)   (快照數(shù)據(jù))    (無(wú)歷史數(shù)據(jù))
        │              │              │
        └──────────────┴──────────────┘
                       ↓
              ┌─────────────────┐
              │   恢復(fù)完成      │
              │   對(duì)外提供服務(wù)   │
              └─────────────────┘

核心原則

  • AOF 優(yōu)先級(jí) > RDB 優(yōu)先級(jí)
  • 原因:AOF 數(shù)據(jù)通常比 RDB 更完整(丟失數(shù)據(jù)更少)

四、生產(chǎn)環(huán)境配置推薦

完整配置示例

# ==================== RDB 配置 ====================
dbfilename dump.rdb                    # RDB 文件名
dir /var/lib/redis                     # 數(shù)據(jù)目錄
?
# 快照觸發(fā)條件(滿足任一即觸發(fā))
save 900 1                             # 900 秒內(nèi)至少 1 個(gè) key 變化
save 300 10                            # 300 秒內(nèi)至少 10 個(gè) key 變化
save 60 10000                          # 60 秒內(nèi)至少 10000 個(gè) key 變化
?
stop-writes-on-bgsave-error yes        # RDB 失敗時(shí)停止寫(xiě)入
rdbcompression yes                     # 壓縮 RDB 文件
rdbchecksum yes                        # 校驗(yàn)和
?
# ==================== AOF 配置 ====================
appendonly yes                         # 開(kāi)啟 AOF
appendfilename "appendonly.aof"        # AOF 文件名
?
# AOF 落盤(pán)策略(三選一)
appendfsync everysec                   # 推薦:每秒同步(性能與安全平衡)
# appendfsync always                   # 每次寫(xiě)都同步(最安全,性能差)
# appendfsync no                       # 由系統(tǒng)決定(性能最好,可能丟數(shù)據(jù))
?
no-appendfsync-on-rewrite no           # 重寫(xiě)時(shí)是否禁用 fsync
auto-aof-rewrite-percentage 100        # AOF 增長(zhǎng) 100% 時(shí)觸發(fā)重寫(xiě)
auto-aof-rewrite-min-size 64mb         # AOF 最小 64MB 才觸發(fā)重寫(xiě)
?
# ==================== 混合持久化 ====================
aof-use-rdb-preamble yes               # 開(kāi)啟混合持久化(關(guān)鍵!)

五、兩種模式對(duì)比

模式一:傳統(tǒng)雙持久化(Redis 4.0 之前)

┌─────────────────────────────────────────────────────────────────┐
│                    傳統(tǒng)雙持久化                                  │
└─────────────────────────────────────────────────────────────────┘
?
文件結(jié)構(gòu):
┌─────────────────────┐    ┌─────────────────────────────────┐
│   dump.rdb          │    │   appendonly.aof                │
│   (獨(dú)立 RDB 文件)     │    │   (純 AOF 日志,無(wú) RDB 前綴)      │
│   全量快照          │    │   所有寫(xiě)命令                    │
└─────────────────────┘    └─────────────────────────────────┘
?
恢復(fù)時(shí):
1. 優(yōu)先加載 AOF 文件
2. 逐條重放所有命令
3. RDB 文件僅作為備份
?
缺點(diǎn):
? AOF 文件大
? 恢復(fù)慢
? 兩份文件獨(dú)立管理

模式二:混合持久化(Redis 4.0+ 推薦)

┌─────────────────────────────────────────────────────────────────┐
│                    混合持久化                                    │
└─────────────────────────────────────────────────────────────────┘
?
文件結(jié)構(gòu):
┌─────────────────────────────────────────────────────────────────┐
│   appendonly.aof (唯一持久化文件)                                │
│   ┌─────────────────┬───────────────────────────────────────┐   │
│   │   RDB 快照部分   │   AOF 增量命令部分                     │   │
│   │   (二進(jìn)制格式)   │   (文本命令格式)                       │   │
│   │   基礎(chǔ)數(shù)據(jù)      │   RDB 之后的寫(xiě)操作                     │   │
│   └─────────────────┴───────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘
?
恢復(fù)時(shí):
1. 加載 RDB 快照部分(快速)
2. 重放 AOF 增量命令(少量)
3. dump.rdb 文件不再使用
?
優(yōu)點(diǎn):
? 恢復(fù)速度快
? 數(shù)據(jù)完整性高
? 文件管理簡(jiǎn)單

六、實(shí)際場(chǎng)景演示

場(chǎng)景:Redis 重啟恢復(fù)

時(shí)間線:
T0: Redis 啟動(dòng),開(kāi)啟 RDB+AOF 混合持久化
T1: 寫(xiě)入 100 萬(wàn)條數(shù)據(jù)
T2: 觸發(fā) RDB 快照 → dump.rdb 生成
T3: AOF 持續(xù)記錄寫(xiě)命令
T4: AOF 重寫(xiě) → appendonly.aof 包含 RDB 快照 + 增量命令
T5: Redis 宕機(jī)
T6: Redis 重啟
?
恢復(fù)過(guò)程:
┌─────────────────────────────────────────────────────────────────┐
│  步驟 1: 檢測(cè)文件                                                │
│  - 發(fā)現(xiàn) appendonly.aof 存在                                     │
│  - 發(fā)現(xiàn) dump.rdb 存在(但不用)                                  │
├─────────────────────────────────────────────────────────────────┤
│  步驟 2: 加載 AOF 文件                                           │
│  - 讀取 RDB 前綴部分 → 恢復(fù) 100 萬(wàn)條基礎(chǔ)數(shù)據(jù) (約 2 秒)               │
│  - 重放 AOF 增量命令 → 恢復(fù) T4-T5 期間的寫(xiě)操作 (約 0.5 秒)          │
├─────────────────────────────────────────────────────────────────┤
│  步驟 3: 恢復(fù)完成                                                │
│  - 總耗時(shí)約 2.5 秒                                               │
│  - 數(shù)據(jù)丟失:僅 T5 時(shí)刻未 fsync 的少量數(shù)據(jù)                        │
└─────────────────────────────────────────────────────────────────┘
?
對(duì)比純 RDB 恢復(fù):
- 恢復(fù)時(shí)間:約 2 秒
- 數(shù)據(jù)丟失:T2-T5 期間所有寫(xiě)操作(可能幾小時(shí)數(shù)據(jù))
?
對(duì)比純 AOF 恢復(fù):
- 恢復(fù)時(shí)間:約 30 秒+(重放所有命令)
- 數(shù)據(jù)丟失:僅 T5 時(shí)刻未 fsync 的少量數(shù)據(jù)

七、最佳實(shí)踐總結(jié)

場(chǎng)景推薦配置理由
生產(chǎn)環(huán)境RDB+AOF 混合持久化性能與安全最佳平衡
高寫(xiě)入場(chǎng)景appendfsync everysec每秒同步,性能影響小
金融級(jí)數(shù)據(jù)appendfsync always不丟數(shù)據(jù),接受性能損失
純緩存場(chǎng)景可關(guān)閉持久化追求極致性能
Redis 版本4.0+支持混合持久化

監(jiān)控建議

# 檢查持久化狀態(tài)
redis-cli INFO persistence
?
# 關(guān)鍵指標(biāo):
# - rdb_last_bgsave_status: RDB 最后保存狀態(tài)
# - aof_enabled: AOF 是否開(kāi)啟
# - aof_last_rewrite_time_sec: AOF 最后重寫(xiě)耗時(shí)
# - aof_current_size: AOF 當(dāng)前文件大小

八、總結(jié)

問(wèn)題答案
RDB 和 AOF 能同時(shí)開(kāi)嗎?可以,且生產(chǎn)環(huán)境推薦同時(shí)開(kāi)啟
恢復(fù)時(shí)優(yōu)先用哪個(gè)?AOF 優(yōu)先級(jí)更高(數(shù)據(jù)更完整)
混合持久化是什么?AOF 文件頭部存 RDB 快照,尾部存增量命令
需要配置什么?aof-use-rdb-preamble yes(4.0+ 默認(rèn)開(kāi)啟)
最佳實(shí)踐?Redis 4.0+ 使用混合持久化 + appendfsync everysec
Redis 4.0+ 有幾個(gè)持久化文件?兩個(gè):dump.rdb + appendonly.aof
Redis 4.0+  appendonly.aof 內(nèi)容是什么?RDB 快照前綴 + AOF 增量命令
Redis 4.0+  dump.rdb 還會(huì)生成嗎?會(huì),只要 save 配置生效
Redis 4.0+   dump.rdb 有什么用?備份、降級(jí)兼容、手動(dòng)恢復(fù)
Redis 4.0+   能刪除 dump.rdb 嗎?可以,但不推薦(失去備份)
Redis 4.0+   如何只保留一個(gè)文件?配置 save "" 禁用 RDB(不推薦)
Redis 版本持久化模式dump.rdbappendonly.aof恢復(fù)時(shí)使用哪個(gè)
4.0 之前僅 RDB? 存在? 不存在RDB
4.0 之前僅 AOF? 不存在? 存在AOF
4.0 之前RDB+AOF? 存在? 存在AOF(優(yōu)先)
4.0+混合持久化? 存在? 存在AOF(含 RDB 前綴)

核心要點(diǎn)

  • Redis 4.0+ 的混合持久化是生產(chǎn)環(huán)境的標(biāo)準(zhǔn)配置,它巧妙地將 RDB 的快速恢復(fù)和 AOF 的數(shù)據(jù)完整性結(jié)合起來(lái),通過(guò)單一的 AOF 文件同時(shí)存儲(chǔ)快照和增量日志,實(shí)現(xiàn)了性能和安全的最優(yōu)平衡。
  • Redis 4.0+ 混合持久化后,dump.rdb 和 appendonly.aof 兩個(gè)文件都會(huì)存在。dump.rdb 雖然恢復(fù)時(shí)不用,但仍然作為獨(dú)立備份存在,提供降級(jí)兼容和冷備能力。appendonly.aof 才是真正用于恢復(fù)的主文件(包含 RDB 快照 + 增量命令)。

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

相關(guān)文章

  • Redis如何統(tǒng)計(jì)用戶訪問(wèn)量

    Redis如何統(tǒng)計(jì)用戶訪問(wèn)量

    這篇文章主要介紹了Redis如何統(tǒng)計(jì)用戶訪問(wèn)量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Redis 鍵空間事件通知的具體使用

    Redis 鍵空間事件通知的具體使用

    本文系統(tǒng)解析Redis鍵空間通知機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 使用redis實(shí)現(xiàn)附近的人功能

    使用redis實(shí)現(xiàn)附近的人功能

    這篇文章主要介紹了使用redis實(shí)現(xiàn)附近的人,實(shí)現(xiàn)諸如附近的人這類依賴于地理位置信息的功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Centos 7 如何安裝Redis(推薦)

    Centos 7 如何安裝Redis(推薦)

    這篇文章主要介紹了Centos 7 如何安裝Redis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Redis中的String類型及使用Redis解決訂單秒殺超賣問(wèn)題

    Redis中的String類型及使用Redis解決訂單秒殺超賣問(wèn)題

    這篇文章主要介紹了Redis中的String類型及使用Redis解決訂單秒殺超賣問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis高并發(fā)緩存設(shè)計(jì)問(wèn)題與性能優(yōu)化

    Redis高并發(fā)緩存設(shè)計(jì)問(wèn)題與性能優(yōu)化

    本文詳細(xì)介紹了Redis緩存設(shè)計(jì)中常見(jiàn)的問(wèn)題及解決方案,包括緩存穿透、緩存失效(擊穿)、緩存雪崩、熱點(diǎn)緩存key重建優(yōu)化、緩存與數(shù)據(jù)庫(kù)雙寫(xiě)不一致以及開(kāi)發(fā)規(guī)范與性能優(yōu)化,感興趣的可以了解一下
    2024-11-11
  • windows平臺(tái)安裝部署Redis

    windows平臺(tái)安裝部署Redis

    Redis是一個(gè)開(kāi)源、跨平臺(tái)的數(shù)據(jù)庫(kù),因此Redis數(shù)據(jù)庫(kù)可以運(yùn)行在Windows、Linux、Mac OS和BSD等多個(gè)平臺(tái)上,本文主要介紹了windows平臺(tái)安裝部署Redis,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • redis 解決key的亂碼問(wèn)題,并清理詳解

    redis 解決key的亂碼問(wèn)題,并清理詳解

    這篇文章主要介紹了redis 解決key的亂碼問(wèn)題,并清理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • redis如何實(shí)現(xiàn)清空緩存

    redis如何實(shí)現(xiàn)清空緩存

    這篇文章主要介紹了redis如何實(shí)現(xiàn)清空緩存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Redis實(shí)現(xiàn)延遲任務(wù)的常見(jiàn)方案詳解

    Redis實(shí)現(xiàn)延遲任務(wù)的常見(jiàn)方案詳解

    延遲任務(wù)(Delayed?Task)是指在未來(lái)的某個(gè)時(shí)間點(diǎn),執(zhí)行相應(yīng)的任務(wù),本文為大家整理了Redis實(shí)現(xiàn)延遲任務(wù)的幾個(gè)常見(jiàn)方案,希望對(duì)大家有所幫助
    2024-04-04

最新評(píng)論

白山市| 鹤岗市| 林周县| 贞丰县| 巢湖市| 屏山县| 衡阳县| 惠安县| 长汀县| 绥滨县| 中宁县| 富宁县| 双峰县| 黑山县| 东乡族自治县| 绥中县| 沧州市| 景洪市| 黄石市| 盱眙县| 枣强县| 鹿邑县| 桦甸市| 宜章县| 辉南县| 云安县| 宜兰县| 株洲市| 华池县| 龙口市| 合水县| 灵丘县| 南丰县| 曲麻莱县| 永善县| 兴和县| 汝州市| 宁陕县| 喀什市| 吉木乃县| 方城县|