[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1b300lqgtfmoj":3,"$f250wz8h39yydc":8,"$f2mmjxrvf7hurr":29,"$f1ypo34fz8wxll":33,"$fy5qatghhyfvo":44,"toc-1948341118-5-5":48},{"description":4,"domain":5,"id":6,"keywords":4,"title":7},"","api.kongjs.com",1,"默认",[9,20,24],{"children":10,"icon":4,"id":11,"linkType":12,"linkUrl":13,"parentId":14,"sort":15,"status":16,"target":17,"title":18,"visible":19},null,"447369447469600768","URL","\u002F","0",0,"1","_self","首页",true,{"children":10,"icon":4,"id":21,"linkType":12,"linkUrl":22,"parentId":14,"sort":15,"status":16,"target":17,"title":23,"visible":19},"447369693859794944","\u002Fnotes","笔记",{"children":10,"icon":4,"id":25,"linkType":26,"linkUrl":27,"parentId":14,"sort":15,"status":16,"target":17,"title":28,"visible":19},"447369977960976384","PAGE","\u002Fabout","关于我",{"category":10,"categoryId":10,"cover":10,"description":4,"fileId":10,"id":30,"publishAt":10,"tags":31,"title":32},"453168730659102720",[],"Redis面试核心知识",[34,37,40],{"children":10,"description":4,"id":35,"noteId":30,"parentId":14,"sort":15,"status":16,"title":36},"453168855791968256","Redis缓存雪崩、缓存穿透、缓存击穿详解",{"children":10,"description":4,"id":38,"noteId":30,"parentId":14,"sort":6,"status":16,"title":39},"453168927736864768","Redis持久化：RDB与AOF原理、机制、用途、优缺点、混合持久化",{"children":10,"description":4,"id":41,"noteId":30,"parentId":14,"sort":42,"status":16,"title":43},"453169086310916096",2,"Redis 内存淘汰机制 8种策略+LRU、LFU底层原理",{"content":45,"contentType":46,"description":4,"title":39,"wordCount":47},"# Redis持久化：RDB与AOF原理、机制、用途、优缺点、混合持久化\n\nRedis默认是**内存数据库**，数据断电即失。持久化就是把**内存数据写入磁盘**，保证宕机数据不丢失。Redis 提供两种核心持久化方案：**RDB快照**、**AOF日志**，以及 Redis4\\.0\\+ 推出的 **RDB\\+AOF 混合持久化**。\n\n## 一、核心总览（面试第一句）\n\n- **RDB**：快照持久化，保存「某一时刻的完整数据」，**快、文件小、丢数据多**\n\n- **AOF**：日志持久化，保存「所有写入命令」，**慢、文件大、几乎不丢数据**\n\n## 二、RDB 持久化原理（Redis Database Backup）\n\n### 1\\. 原理\n\n**核心机制**：在指定时间节点，**fork子进程**，把当前内存中所有数据**一次性快照写入 dump\\.rdb 二进制文件**。\n\n属于**全量持久化**：保存的是数据结果，不是命令。\n\n### 2\\. 触发方式\n\n#### （1）自动触发（配置规则）\n\nredis\\.conf 默认规则：\n\n- save 900 1：900秒内至少1个key修改，触发快照\n\n- save 300 10：300秒内至少10个key修改\n\n- save 60 10000：60秒内至少10000个key修改\n\n#### （2）手动触发\n\n- **bgsave**：后台保存（fork子进程，不阻塞主线程，生产常用）\n\n- **save**：前台保存（阻塞主线程，大数据量卡死，禁止线上用）\n\n#### （3）停机触发\n\n执行 `shutdown` 正常关闭Redis，会自动执行一次 bgsave。\n\n### 3\\. 核心流程（BGSAVE）\n\n1. 主线程判断满足快照条件\n\n2. 调用fork\\(\\) 创建子进程（短暂阻塞）\n\n3. 子进程遍历内存数据，写入临时rdb文件\n\n4. 写入完成替换旧rdb文件，结束\n\n**写时复制COW**：fork后子进程共享内存，主线程新修改数据会复制新内存页，互不影响。\n\n### 4\\. RDB 优点\n\n- **文件体积小**：二进制压缩快照，适合冷备份、迁移\n\n- **恢复速度极快**：直接加载数据，无需回放命令\n\n- **性能开销低**：子进程完成IO，主线程几乎无压力\n\n### 5\\. RDB 缺点（致命）\n\n- **丢失数据风险大**：两次快照之间的数据完全不保存，宕机丢失区间数据\n\n- **fork耗时**：超大内存实例fork子进程会短暂阻塞服务\n\n- **无法秒级持久化**：不能实时落地\n\n## 三、AOF 持久化原理（Append Only File）\n\n### 1\\. 原理\n\n**核心机制**：记录Redis**每一条写命令**（set、hset、del等），以日志形式追加到 aof 文件。\n\n重启Redis时，**回放AOF日志命令**恢复内存数据。属于**增量持久化**。\n\n### 2\\. 三种刷盘策略（核心面试点）\n\nAOF 真正决定丢不丢数据的关键：**fsync刷盘策略**\n\n- **appendfsync always**：每写一条命令立刻刷盘，**零丢失**，性能极差\n\n- **appendfsync everysec（默认）**：每秒批量刷盘，最多丢失1秒数据，**均衡方案**\n\n- **appendfsync no**：交给操作系统自动刷盘，性能最高，丢失数据最多\n\n### 3\\. AOF 重写机制（核心原理\\+完整过程）\n\n**核心背景**：AOF以日志形式逐条追加写命令，对同一个key的多次修改会留存大量冗余命令（如多次set覆盖、多次incr叠加），导致AOF文件体积持续膨胀、重启恢复耗时大幅增加。为此Redis提供**AOF重写（AOF Rewrite）**机制，精简日志、压缩文件体积。\n\n**核心本质**：不读取旧的冗余AOF日志，直接遍历**当前内存最新数据**，生成一组可还原全量数据的**最小化精简命令集**，替换原有臃肿的AOF文件，彻底清除冗余指令。\n\n#### （1）AOF重写触发条件\n\n分为**自动触发**和**手动触发**两种，生产以自动触发为主：\n\n- **手动触发**：执行 `bgrewriteaof` 命令，后台主动触发重写，不阻塞主线程\n\n- **自动触发（配置控制）**：依靠两个核心参数判断：\n1\\. **auto\\-aof\\-rewrite\\-min\\-size**：AOF文件最小重写阈值（默认64MB），文件小于该值不触发重写；\n2\\. **auto\\-aof\\-rewrite\\-percentage**：文件增长率阈值（默认100%），即当前AOF文件大小相比上一次重写后增长1倍，且满足最小大小，自动触发重写。\n\n#### （2）AOF重写完整执行流程（面试高频）\n\n整体全程后台执行，仅短暂阻塞主线程，核心分为5步：\n\n1. **步骤1：触发重写，fork子进程**\n主线程判断满足重写条件，调用fork\\(\\)创建专属重写子进程，仅fork瞬间短暂阻塞主线程，后续业务正常读写。\n\n2. **步骤2：子进程遍历内存，生成精简临时文件**\n子进程遍历Redis内存中所有key的最新状态，摒弃所有冗余命令，用最少的指令生成新的日志内容（例如多次修改同一个key，仅保留最终结果的一条set命令），写入**aof\\_rewrite\\_temp**临时文件。\n\n3. **步骤3：主线程缓存增量新命令（核心容错机制）**\n子进程重写期间，主线程正常处理用户的读写请求，新的写命令会**同时追加到旧AOF文件和重写缓冲区**。\n目的：保证重写过程中新增数据不丢失，解决「重写期间数据更新无法录入新文件」的问题。\n\n4. **步骤4：子进程结束，主线程追加增量日志**\n子进程完成内存数据遍历，生成完整精简临时文件后退出；主线程将**重写缓冲区中缓存的所有增量命令**，追加到临时文件末尾，保证新旧数据完整、无遗漏。\n\n5. **步骤5：原子替换旧文件**\n通过系统原子操作，用精简的临时文件替换老旧臃肿的AOF文件，完成重写，后续持久化基于新文件执行。\n\n#### （3）关键特性与资源优化点\n\n- **无阻塞核心设计**：重写核心逻辑由子进程完成，主线程仅承担缓存增量日志、收尾追加工作，几乎不影响业务读写性能；\n\n- **规避日志空洞**：缓冲区增量追加机制，彻底解决重写窗口期的数据丢失问题，保证数据一致性；\n\n- **命令极致精简**：对集合、哈希、数值自增等高频修改数据，统一合并为最终状态指令，文件压缩比极高。\n\n#### （4）AOF重写注意事项\n\n- 重写期间不会暂停AOF持久化，旧AOF文件持续写入，故障不会丢数据；\n\n- fork子进程会消耗少量CPU和内存，大内存实例需规避业务高峰期重写；\n\n- Redis允许同时存在RDB持久化和AOF重写，底层资源互斥，不会并发执行，避免资源耗尽。\n\n问题：频繁修改同一个key，AOF会堆积大量冗余命令（多次set覆盖），文件越来越大。\n\n**AOF重写rewrite**：根据**当前内存最新数据**，生成精简的最小命令集，替换旧日志。\n\n不会读取旧日志，直接读内存数据，极大压缩文件体积。\n\n问题：频繁修改同一个key，AOF会堆积大量冗余命令（多次set覆盖），文件越来越大。\n\n**AOF重写rewrite**：根据**当前内存最新数据**，生成精简的最小命令集，替换旧日志。\n\n不会读取旧日志，直接读内存数据，极大压缩文件体积。\n\n### 4\\. AOF 优点\n\n- **数据安全性极高**：默认每秒刷盘，最多丢1秒数据\n\n- **日志可读、可修复**：文本格式，可手动删脏数据\n\n- **增量写入**：追加写，性能损耗小\n\n### 5\\. AOF 缺点\n\n- **文件体积大**：命令日志远大于二进制快照\n\n- **恢复慢**：需要逐条回放命令\n\n- **持续开销**：高频写入场景IO压力比RDB大\n\n## 四、RDB vs AOF 全方位对比（面试必背表）\n\n|对比维度|RDB|AOF|\n|---|---|---|\n|持久化形式|快照、保存数据结果（全量）|日志、保存写入命令（增量）|\n|文件类型|二进制、体积小|文本日志、体积大|\n|数据丢失|丢失两次快照间数据（多）|最多丢失1秒数据（极少）|\n|恢复速度|极快|慢（回放命令）|\n|运行开销|低（周期性）|较高（持续IO）|\n|可用性|适合冷备、迁移|适合线上高可靠业务|\n\n## 五、混合持久化（Redis4\\.0\\+ 终极方案）\n\n### 1\\. 原理\n\n**混合持久化 = RDB快照 \\+ AOF增量日志**\n\nAOF重写时：**先将当前内存数据以RDB格式写入文件头部，后续增量命令以AOF格式追加**。\n\n### 2\\. 解决的痛点\n\n- 纯AOF重启恢复太慢\n\n- 纯RDB数据丢失太多\n\n### 3\\. 优势\n\n- 兼具 **RDB恢复快** \\+ **AOF数据安全** 双优点\n\n- 文件体积小、重启速度大幅提升\n\n- 线上生产**最优配置**\n\n## 六、生产环境最佳实践（面试标准答案）\n\n1. **单机普通业务**：开启混合持久化（默认开启），everysec刷盘\n\n2. **极高数据安全业务**：AOF everysec \\+ 定时RDB冷备\n\n3. **纯缓存、允许丢数据**：关闭持久化，提升极致性能\n\n4. **禁止单独用纯RDB做线上持久化**：丢失数据风险太高\n\n## 七、极简面试背诵口诀\n\n- **RDB**：定时快照、二进制、体积小、恢复快、丢数据多，适合备份迁移\n\n- **AOF**：记录命令、日志追加、安全性高、最多丢1秒、文件大恢复慢\n\n- **混合持久化**：头RDB尾AOF，兼顾速度与安全，生产最优\n","markdown",4105,{"frontmatter":49,"meta":50,"nodes":140},{},{"title":39,"description":51,"toc":52},"Redis默认是内存数据库，数据断电即失。持久化就是把内存数据写入磁盘，保证宕机数据不丢失。Redis 提供两种核心持久化方案：RDB快照、AOF日志，以及 Redis4.0+ 推出的 RDB+AOF 混合持久化。",{"title":4,"searchDepth":53,"depth":53,"links":54},5,[55,57,88,119,122,134,137],{"id":4,"depth":42,"text":56},"一、核心总览（面试第一句）",{"id":58,"depth":42,"text":59,"children":60},"rdb-redis-database-backup","二、RDB 持久化原理（Redis Database Backup）",[61,65,79,82,85],{"id":62,"depth":63,"text":64},"rdb-redis-database-backup-_1",3,"1. 原理",{"id":66,"depth":63,"text":67,"children":68},"rdb-redis-database-backup-_2","2. 触发方式",[69,73,76],{"id":70,"depth":71,"text":72},"rdb-redis-database-backup-_2-_1",4,"（1）自动触发（配置规则）",{"id":74,"depth":71,"text":75},"rdb-redis-database-backup-_2-_2","（2）手动触发",{"id":77,"depth":71,"text":78},"rdb-redis-database-backup-_2-_3","（3）停机触发",{"id":80,"depth":63,"text":81},"rdb-redis-database-backup-_3-bgsave","3. 核心流程（BGSAVE）",{"id":83,"depth":63,"text":84},"rdb-redis-database-backup-_4-rdb","4. RDB 优点",{"id":86,"depth":63,"text":87},"rdb-redis-database-backup-_5-rdb","5. RDB 缺点（致命）",{"id":89,"depth":42,"text":90,"children":91},"aof-append-only-file","三、AOF 持久化原理（Append Only File）",[92,94,97,113,116],{"id":93,"depth":63,"text":64},"aof-append-only-file-_1",{"id":95,"depth":63,"text":96},"aof-append-only-file-_2","2. 三种刷盘策略（核心面试点）",{"id":98,"depth":63,"text":99,"children":100},"aof-append-only-file-_3-aof","3. AOF 重写机制（核心原理+完整过程）",[101,104,107,110],{"id":102,"depth":71,"text":103},"aof-append-only-file-_3-aof-_1aof","（1）AOF重写触发条件",{"id":105,"depth":71,"text":106},"aof-append-only-file-_3-aof-_2aof","（2）AOF重写完整执行流程（面试高频）",{"id":108,"depth":71,"text":109},"aof-append-only-file-_3-aof-_3","（3）关键特性与资源优化点",{"id":111,"depth":71,"text":112},"aof-append-only-file-_3-aof-_4aof","（4）AOF重写注意事项",{"id":114,"depth":63,"text":115},"aof-append-only-file-_4-aof","4. AOF 优点",{"id":117,"depth":63,"text":118},"aof-append-only-file-_5-aof","5. AOF 缺点",{"id":120,"depth":42,"text":121},"rdb-vs-aof","四、RDB vs AOF 全方位对比（面试必背表）",{"id":123,"depth":42,"text":124,"children":125},"redis40","五、混合持久化（Redis4.0+ 终极方案）",[126,128,131],{"id":127,"depth":63,"text":64},"redis40-_1",{"id":129,"depth":63,"text":130},"redis40-_2","2. 解决的痛点",{"id":132,"depth":63,"text":133},"redis40-_3","3. 优势",{"id":135,"depth":42,"text":136},"-1","六、生产环境最佳实践（面试标准答案）",{"id":138,"depth":42,"text":139},"-2","七、极简面试背诵口诀",[141,145,170,173,195,197,200,213,220,222,225,228,239,241,255,257,265,267,282,288,290,310,312,332,334,336,345,355,357,363,390,392,398,412,414,425,450,452,455,499,501,521,523,534,537,546,549,551,557,559,561,581,583,603,605,692,694,696,701,707,709,717,719,741,743,769,771],[142,143,39],"h1",{"id":144},"redisrdbaof",[146,147,148,149,153,154,157,158,161,162,165,166,169],"p",{},"Redis默认是",[150,151,152],"strong",{},"内存数据库","，数据断电即失。持久化就是把",[150,155,156],{},"内存数据写入磁盘","，保证宕机数据不丢失。Redis 提供两种核心持久化方案：",[150,159,160],{},"RDB快照","、",[150,163,164],{},"AOF日志","，以及 Redis4.0+ 推出的 ",[150,167,168],{},"RDB+AOF 混合持久化","。",[171,172,56],"h2",{"id":4},[174,175,176,186],"ul",{},[177,178,179,182,183],"li",{},[150,180,181],{},"RDB","：快照持久化，保存「某一时刻的完整数据」，",[150,184,185],{},"快、文件小、丢数据多",[177,187,188,191,192],{},[150,189,190],{},"AOF","：日志持久化，保存「所有写入命令」，",[150,193,194],{},"慢、文件大、几乎不丢数据",[171,196,59],{"id":58},[198,199,64],"h3",{"id":62},[146,201,202,205,206,209,210,169],{},[150,203,204],{},"核心机制","：在指定时间节点，",[150,207,208],{},"fork子进程","，把当前内存中所有数据",[150,211,212],{},"一次性快照写入 dump.rdb 二进制文件",[146,214,215,216,219],{},"属于",[150,217,218],{},"全量持久化","：保存的是数据结果，不是命令。",[198,221,67],{"id":66},[223,224,72],"h4",{"id":70},[146,226,227],{},"redis.conf 默认规则：",[174,229,230,233,236],{},[177,231,232],{},"save 900 1：900秒内至少1个key修改，触发快照",[177,234,235],{},"save 300 10：300秒内至少10个key修改",[177,237,238],{},"save 60 10000：60秒内至少10000个key修改",[223,240,75],{"id":74},[174,242,243,249],{},[177,244,245,248],{},[150,246,247],{},"bgsave","：后台保存（fork子进程，不阻塞主线程，生产常用）",[177,250,251,254],{},[150,252,253],{},"save","：前台保存（阻塞主线程，大数据量卡死，禁止线上用）",[223,256,78],{"id":77},[146,258,259,260,264],{},"执行 ",[261,262,263],"code",{},"shutdown"," 正常关闭Redis，会自动执行一次 bgsave。",[198,266,81],{"id":80},[268,269,270,273,276,279],"ol",{},[177,271,272],{},"主线程判断满足快照条件",[177,274,275],{},"调用fork() 创建子进程（短暂阻塞）",[177,277,278],{},"子进程遍历内存数据，写入临时rdb文件",[177,280,281],{},"写入完成替换旧rdb文件，结束",[146,283,284,287],{},[150,285,286],{},"写时复制COW","：fork后子进程共享内存，主线程新修改数据会复制新内存页，互不影响。",[198,289,84],{"id":83},[174,291,292,298,304],{},[177,293,294,297],{},[150,295,296],{},"文件体积小","：二进制压缩快照，适合冷备份、迁移",[177,299,300,303],{},[150,301,302],{},"恢复速度极快","：直接加载数据，无需回放命令",[177,305,306,309],{},[150,307,308],{},"性能开销低","：子进程完成IO，主线程几乎无压力",[198,311,87],{"id":86},[174,313,314,320,326],{},[177,315,316,319],{},[150,317,318],{},"丢失数据风险大","：两次快照之间的数据完全不保存，宕机丢失区间数据",[177,321,322,325],{},[150,323,324],{},"fork耗时","：超大内存实例fork子进程会短暂阻塞服务",[177,327,328,331],{},[150,329,330],{},"无法秒级持久化","：不能实时落地",[171,333,90],{"id":89},[198,335,64],{"id":93},[146,337,338,340,341,344],{},[150,339,204],{},"：记录Redis",[150,342,343],{},"每一条写命令","（set、hset、del等），以日志形式追加到 aof 文件。",[146,346,347,348,351,352,169],{},"重启Redis时，",[150,349,350],{},"回放AOF日志命令","恢复内存数据。属于",[150,353,354],{},"增量持久化",[198,356,96],{"id":95},[146,358,359,360],{},"AOF 真正决定丢不丢数据的关键：",[150,361,362],{},"fsync刷盘策略",[174,364,365,375,384],{},[177,366,367,370,371,374],{},[150,368,369],{},"appendfsync always","：每写一条命令立刻刷盘，",[150,372,373],{},"零丢失","，性能极差",[177,376,377,380,381],{},[150,378,379],{},"appendfsync everysec（默认）","：每秒批量刷盘，最多丢失1秒数据，",[150,382,383],{},"均衡方案",[177,385,386,389],{},[150,387,388],{},"appendfsync no","：交给操作系统自动刷盘，性能最高，丢失数据最多",[198,391,99],{"id":98},[146,393,394,397],{},[150,395,396],{},"核心背景","：AOF以日志形式逐条追加写命令，对同一个key的多次修改会留存大量冗余命令（如多次set覆盖、多次incr叠加），导致AOF文件体积持续膨胀、重启恢复耗时大幅增加。为此Redis提供**AOF重写（AOF Rewrite）**机制，精简日志、压缩文件体积。",[146,399,400,403,404,407,408,411],{},[150,401,402],{},"核心本质","：不读取旧的冗余AOF日志，直接遍历",[150,405,406],{},"当前内存最新数据","，生成一组可还原全量数据的",[150,409,410],{},"最小化精简命令集","，替换原有臃肿的AOF文件，彻底清除冗余指令。",[223,413,103],{"id":102},[146,415,416,417,420,421,424],{},"分为",[150,418,419],{},"自动触发","和",[150,422,423],{},"手动触发","两种，生产以自动触发为主：",[174,426,427,436],{},[177,428,429,431,432,435],{},[150,430,423],{},"：执行 ",[261,433,434],{},"bgrewriteaof"," 命令，后台主动触发重写，不阻塞主线程",[177,437,438,441,442,445,446,449],{},[150,439,440],{},"自动触发（配置控制）","：依靠两个核心参数判断：\n1. ",[150,443,444],{},"auto-aof-rewrite-min-size","：AOF文件最小重写阈值（默认64MB），文件小于该值不触发重写；\n2. ",[150,447,448],{},"auto-aof-rewrite-percentage","：文件增长率阈值（默认100%），即当前AOF文件大小相比上一次重写后增长1倍，且满足最小大小，自动触发重写。",[223,451,106],{"id":105},[146,453,454],{},"整体全程后台执行，仅短暂阻塞主线程，核心分为5步：",[268,456,457,463,473,483,493],{},[177,458,459,462],{},[150,460,461],{},"步骤1：触发重写，fork子进程","\n主线程判断满足重写条件，调用fork()创建专属重写子进程，仅fork瞬间短暂阻塞主线程，后续业务正常读写。",[177,464,465,468,469,472],{},[150,466,467],{},"步骤2：子进程遍历内存，生成精简临时文件","\n子进程遍历Redis内存中所有key的最新状态，摒弃所有冗余命令，用最少的指令生成新的日志内容（例如多次修改同一个key，仅保留最终结果的一条set命令），写入",[150,470,471],{},"aof_rewrite_temp","临时文件。",[177,474,475,478,479,482],{},[150,476,477],{},"步骤3：主线程缓存增量新命令（核心容错机制）","\n子进程重写期间，主线程正常处理用户的读写请求，新的写命令会",[150,480,481],{},"同时追加到旧AOF文件和重写缓冲区","。\n目的：保证重写过程中新增数据不丢失，解决「重写期间数据更新无法录入新文件」的问题。",[177,484,485,488,489,492],{},[150,486,487],{},"步骤4：子进程结束，主线程追加增量日志","\n子进程完成内存数据遍历，生成完整精简临时文件后退出；主线程将",[150,490,491],{},"重写缓冲区中缓存的所有增量命令","，追加到临时文件末尾，保证新旧数据完整、无遗漏。",[177,494,495,498],{},[150,496,497],{},"步骤5：原子替换旧文件","\n通过系统原子操作，用精简的临时文件替换老旧臃肿的AOF文件，完成重写，后续持久化基于新文件执行。",[223,500,109],{"id":108},[174,502,503,509,515],{},[177,504,505,508],{},[150,506,507],{},"无阻塞核心设计","：重写核心逻辑由子进程完成，主线程仅承担缓存增量日志、收尾追加工作，几乎不影响业务读写性能；",[177,510,511,514],{},[150,512,513],{},"规避日志空洞","：缓冲区增量追加机制，彻底解决重写窗口期的数据丢失问题，保证数据一致性；",[177,516,517,520],{},[150,518,519],{},"命令极致精简","：对集合、哈希、数值自增等高频修改数据，统一合并为最终状态指令，文件压缩比极高。",[223,522,112],{"id":111},[174,524,525,528,531],{},[177,526,527],{},"重写期间不会暂停AOF持久化，旧AOF文件持续写入，故障不会丢数据；",[177,529,530],{},"fork子进程会消耗少量CPU和内存，大内存实例需规避业务高峰期重写；",[177,532,533],{},"Redis允许同时存在RDB持久化和AOF重写，底层资源互斥，不会并发执行，避免资源耗尽。",[146,535,536],{},"问题：频繁修改同一个key，AOF会堆积大量冗余命令（多次set覆盖），文件越来越大。",[146,538,539,542,543,545],{},[150,540,541],{},"AOF重写rewrite","：根据",[150,544,406],{},"，生成精简的最小命令集，替换旧日志。",[146,547,548],{},"不会读取旧日志，直接读内存数据，极大压缩文件体积。",[146,550,536],{},[146,552,553,542,555,545],{},[150,554,541],{},[150,556,406],{},[146,558,548],{},[198,560,115],{"id":114},[174,562,563,569,575],{},[177,564,565,568],{},[150,566,567],{},"数据安全性极高","：默认每秒刷盘，最多丢1秒数据",[177,570,571,574],{},[150,572,573],{},"日志可读、可修复","：文本格式，可手动删脏数据",[177,576,577,580],{},[150,578,579],{},"增量写入","：追加写，性能损耗小",[198,582,118],{"id":117},[174,584,585,591,597],{},[177,586,587,590],{},[150,588,589],{},"文件体积大","：命令日志远大于二进制快照",[177,592,593,596],{},[150,594,595],{},"恢复慢","：需要逐条回放命令",[177,598,599,602],{},[150,600,601],{},"持续开销","：高频写入场景IO压力比RDB大",[171,604,121],{"id":120},[606,607,608,622],"table",{},[609,610,611],"thead",{},[612,613,614,618,620],"tr",{},[615,616,617],"th",{},"对比维度",[615,619,181],{},[615,621,190],{},[623,624,625,637,648,659,670,681],"tbody",{},[612,626,627,631,634],{},[628,629,630],"td",{},"持久化形式",[628,632,633],{},"快照、保存数据结果（全量）",[628,635,636],{},"日志、保存写入命令（增量）",[612,638,639,642,645],{},[628,640,641],{},"文件类型",[628,643,644],{},"二进制、体积小",[628,646,647],{},"文本日志、体积大",[612,649,650,653,656],{},[628,651,652],{},"数据丢失",[628,654,655],{},"丢失两次快照间数据（多）",[628,657,658],{},"最多丢失1秒数据（极少）",[612,660,661,664,667],{},[628,662,663],{},"恢复速度",[628,665,666],{},"极快",[628,668,669],{},"慢（回放命令）",[612,671,672,675,678],{},[628,673,674],{},"运行开销",[628,676,677],{},"低（周期性）",[628,679,680],{},"较高（持续IO）",[612,682,683,686,689],{},[628,684,685],{},"可用性",[628,687,688],{},"适合冷备、迁移",[628,690,691],{},"适合线上高可靠业务",[171,693,124],{"id":123},[198,695,64],{"id":127},[146,697,698],{},[150,699,700],{},"混合持久化 = RDB快照 + AOF增量日志",[146,702,703,704,169],{},"AOF重写时：",[150,705,706],{},"先将当前内存数据以RDB格式写入文件头部，后续增量命令以AOF格式追加",[198,708,130],{"id":129},[174,710,711,714],{},[177,712,713],{},"纯AOF重启恢复太慢",[177,715,716],{},"纯RDB数据丢失太多",[198,718,133],{"id":132},[174,720,721,732,735],{},[177,722,723,724,727,728,731],{},"兼具 ",[150,725,726],{},"RDB恢复快"," + ",[150,729,730],{},"AOF数据安全"," 双优点",[177,733,734],{},"文件体积小、重启速度大幅提升",[177,736,737,738],{},"线上生产",[150,739,740],{},"最优配置",[171,742,136],{"id":135},[268,744,745,751,757,763],{},[177,746,747,750],{},[150,748,749],{},"单机普通业务","：开启混合持久化（默认开启），everysec刷盘",[177,752,753,756],{},[150,754,755],{},"极高数据安全业务","：AOF everysec + 定时RDB冷备",[177,758,759,762],{},[150,760,761],{},"纯缓存、允许丢数据","：关闭持久化，提升极致性能",[177,764,765,768],{},[150,766,767],{},"禁止单独用纯RDB做线上持久化","：丢失数据风险太高",[171,770,139],{"id":138},[174,772,773,778,783],{},[177,774,775,777],{},[150,776,181],{},"：定时快照、二进制、体积小、恢复快、丢数据多，适合备份迁移",[177,779,780,782],{},[150,781,190],{},"：记录命令、日志追加、安全性高、最多丢1秒、文件大恢复慢",[177,784,785,788],{},[150,786,787],{},"混合持久化","：头RDB尾AOF，兼顾速度与安全，生产最优"]