ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Redis持久化机制全解析:RDB与AOF深度对比与生产实践

Redis持久化机制全解析:RDB与AOF深度对比与生产实践 做过Redis运维和研发的朋友多半都经历过那种深夜线上告警Redis 重启之后数据少了一块的揪心时刻。我当年第一次处理这类事故时第一反应是怀疑有人误删了 key查到最后才发现是持久化策略配置不当内存里的东西根本没按预期落地。Redis 本质是内存数据库性能爆表的前提就是它把所有数据都放在内存里。但这也意味着一旦进程退出、机器重启内存清空数据就没了。要保住这些数据靠的正是 RDB 和 AOF 这两套持久化机制。我一直觉得搞懂这两者之间的取舍比背一百个 Redis 面试题都重要。这篇文章我不打算做那种左列 RDB 右列 AOF的浅层对比而是从原理、参数、配置、恢复速度到生产选型把这条线彻底捋清楚顺便把那些常规文档里不会写、但在一线踩过的坑也一并交代了。对于正在学 Redis 的后端开发或者准备把 Redis 持久化配置落到生产环境、又怕配置错了引发事故的运维同学这应该是一篇比较硬核的参考。我们不谈虚的直接看这几件事的本质。1. 内存就是不安全Redis 持久化到底在解决什么问题先抛一个反直觉的结论Redis 作为缓存在大多数时候丢了数据好像没事因为可以去数据库回源。但只要你把 Redis 用在 session 存储、分布式锁、库存扣减、验证码下发、或者任何没来得及同步到别处的临时业务状态上丢数据就不是小事了。我见过不止一次线上 Redis 因为物理机断电重启后用户登录态全部失效所有在线用户被强制下线那种故障的冲击力是缓存穿透这种词完全比不上的。持久化机制的核心任务就是把内存中的易失状态变成磁盘上的永久副本。这样一来进程崩溃也好、机器断电也好只要磁盘文件还在Redis 就能重新加载数据把服务恢复到接近故障前的状态。这里的关键词是接近因为 RDB 和 AOF 的数据恢复能力是有差异的后面我会详细展开。要知道持久化不是 Redis 的副产品而是一等公民的功能。Redis 官方配置文件中默认启用了 RDB 快照即使你没主动设置AOF 默认是关闭的需要显式开启。很多新人看到一个默认配置就以为什么都不用管结果真出事的时候才发现原来那个默认的 RDB 策略满足不了自己业务的数据安全诉求。所以要理解持久化第一步就是认清自己业务的真实丢数容忍度再决定用哪套机制而不是别人怎么配我就怎么配。还有一点很多人会把持久化和主从复制混为一谈觉得有主从副本就不怕丢数据。这是比较大的误解。主从复制解决的是读压力和高可用问题但主节点宕机时如果它的数据没持久化从节点同步到的也只是主节点的一部分数据。何况 Redis 的复制还涉及到全量同步和增量同步的复杂场景如果主节点内存里的数据本身都丢了副本再完整也没用。所以持久化是高可用架构里最基础的地基地基不稳上面的哨兵和集群都白搭。2. RDB 快照一锤定音的全量备份怎么选它、怎么用活它RDBRedis DataBase是一种基于内存快照的持久化方式。它做的事情说白了就一句话在某个时间点把当前 Redis 进程里的全部数据生成一份二进制的压缩快照文件默认叫 dump.rdb写到磁盘上。这份快照文件就是一个完整的内存拷贝之后要恢复数据时直接把这份二进制文件读回内存即可。2.1 RDB 的触发机制命令触发与自动触发的区别RDB 快照的触发方式有四种这点很多资料讲得比较乱我按实用性重新理一遍。第一种是save命令这是阻塞式的。Redis 主进程执行save时会直接阻塞所有客户端请求直到快照文件写完。这种命令理论上是留给紧急备份用的但生产环境千万别用一旦数据量大了主线程卡个几十秒线上服务基本就雪崩了。第二种是bgsave命令这是后台保存。Redis 主进程通过 fork 出一个子进程由子进程负责把内存数据写进临时 RDB 文件主进程继续处理请求。我们平时在运维端手动触发的快照基本都是用bgsave。命令发出后可以通过lastsave命令查看最后一次成功保存的时间。第三种是自动触发也是生产环境最常用的方式。通过save配置项设置触发规则比如默认配置里的save 900 1 save 300 10 save 60 10000这三条规则的意思是900 秒内发生 1 次写操作、300 秒内发生 10 次写操作、60 秒内发生 10000 次写操作任意一个满足就会触发 bgsave。规则的匹配逻辑不是同时满足而是任一满足即触发。你可以按业务写入量调整比如写入很频繁就调高次数阈值写入稀疏就调大时间窗口。需要强调的是如果配置了多条save规则Redis 会在任意一条满足时触发快照。第四种是主从全量同步和正常关闭时触发。主节点向从节点进行全量复制时如果当前没有正在进行中的 bgsave主节点会主动触发一次 bgsave 生成快照文件给从节点Redis 通过SHUTDOWN命令正常关闭时默认会把内存数据保存到 RDB 文件里再退出。这两种触发很容易被忽略但在实际运维中影响很大——尤其是主从架构里第一次挂从节点时如果主节点数据量很大bgsave 会瞬间拉高 CPU 和磁盘 IO我在生产上就见过因为挂从节点导致主节点 fork 卡顿的情况。2.2 RDB 背后的 fork 与 COW值得每个后端工程师吃透RDB 之所以能做到不阻塞主进程核心倚仗是 fork 系统调用和操作系统的 Copy-On-Write写时复制机制。bgsave触发时主进程 fork 出一个子进程。fork 完成后父子进程共享同一片物理内存子进程读到的是一开始时点的内存状态。它负责把这些共享数据写入临时文件。在主进程持续处理写请求的过程中如果有数据被修改了操作系统会把被修改的内存页复制一份给父进程使用子进程看到的还是未修改前的旧内存页。这就是 COW 的核心不做修改的内存页是共享的发生修改的内存页才需要复制。这个机制的代价是bgsave 期间如果有大量的写操作系统会发生更多的内存页复制导致额外的物理内存开销。极端情况下物理内存可能翻倍如果机器内存本来就紧张Redis 会被系统 OOM killer 直接杀掉到时候不是丢一点数据的问题而是整个进程都没了。因此在开启 RDB 的实例上务必监控 bgsave 期间的内存指标和 fork 耗时给 Redis 至少预留 1 到 2 GB 的富余内存。说白了RDB 用自己的空间和 fork 的机制换取了主进程几乎无阻塞的快照能力。2.3 RDB 的核心配置项与我的使用心得配置 RDB一般就关注这么几个参数dbfilename dump.rdb指定快照文件名默认dump.rdb。不同实例用不同文件名可以避免混淆。dir /var/lib/redis指定快照文件存放目录。这个目录的磁盘空间和 IO 性能非常重要写满或者 IO 延迟过高都会导致 bgsave 失败。stop-writes-on-bgsave-error yes这个参数默认是 yes意思是 bgsave 出错时Redis 会拒绝写入操作。很多人忽略它但它是一把双刃剑。磁盘坏了它宁可拒绝写入也不让你在快照失败的状态下继续写数据但如果你的业务对写入可用性要求很高可能反而希望快照失败时不阻断业务这时候就要改成 no。不过改了之后要自己接收数据安全的风险并且要尽快修复磁盘问题。rdbcompression yes默认开启 LZF 压缩快照文件会更小但会消耗 CPU。如果机器 CPU 资源比较紧张可以考虑关闭压缩换取 CPU代价是磁盘占用变大。rdbchecksum yes默认开启 CRC64 校验码加载时校验文件完整性。这个不建议关闭虽然校验过程有点耗时但能防止静默损坏的 RDB 文件被加载进内存。我的个人习惯是把dir指向独立的 SSD 磁盘而不是和系统盘混在一起避免系统日志或其他程序的 IO 抢占打爆磁盘。同时关闭自动触发规则只在业务低峰期通过 cron 脚本执行bgsave这样可以控制快照的生成时间点避免在高峰期突然 fork 导致延迟抖。这个做法不一定适合所有场景但在数据规模较大、高峰期写入又很密集的实例上实测能有效减少故障面。2.4 RDB 的优缺点我得替它说句公道话RDB 的优点非常明确文件紧凑恢复极快。因为加载一份二进制快照本质就是把内存直接填充回去不需要重放任何命令。对 Redis 这种纯内存数据结构来说加载 1 GB 的快照往往也就几秒到十几秒的事情比 AOF 的重放快一个数量级。RDB 也很适合做冷备份比如把dump.rdb定期传到云存储上留一个周二凌晨的全量副本出大事时可以直接恢复。但 RDB 的缺点同样是硬伤。快照只能做到某个时间点的全量如果两次快照之间 Redis 挂了中间产生的所有数据变更都会丢失。默认配置下最坏可能丢失最近 60 秒内的大量写操作如果恰好触发条件是 10000 次写这对许多业务场景是难以接受的。此外fork 操作本身在实例内存较大或 COW 复制量大时会带来明显的 CPU 峰值。这些都是选型时必须直面的问题。3. AOF 日志不用猜丢失窗口它用命令一条条给你记账AOFAppend Only File的全称已经说明了一切它只做追加操作。与 RDB 的全量快照不同AOF 记录的是 Redis 收到的每一条引发数据变更的写命令以 Redis 序列化协议文本形式追加写入文件。文件记录的是怎么改的而不是改之后长什么样。3.1 AOF 的三种写回策略必须结合 fsync 理解AOF 的核心参数就是appendfsync它决定了数据从 Redis 进程内存中的 AOF buffer 落到磁盘文件的频率。这里面的关键知识点是命令写入 AOF 文件不等于立刻落盘。系统通常先把数据写到操作系统的写缓冲里再在某个时机由内核刷到磁盘这个过程就是 fsync。只有 fsync 成功数据才算真正持久化。appendfsync always每执行一条写命令立即 fsync 一次。这是最安全的方式最多丢失一条命令的数据但代价是巨大的磁盘 IO 开销吞吐量会被打到地板。除非业务极重视数据可靠性且磁盘是高性能 SSD否则不建议在生产环境使用。appendfsync everysec每秒执行一次 fsync。这是默认值也是多数生产环境的推荐项。如果 Redis 崩溃或机器断电最多丢失最近 1 秒内的命令。这个策略在数据安全与性能之间取得了非常好的平衡实际使用中你几乎感觉不到它对性能的拖累但数据丢失窗口从两条快照之间的不确定区间压缩到了确定性的秒级。appendfsync no完全不主动 fsync由操作系统自己决定何时刷盘一般 30 秒左右一次。这个策略性能最好但数据安全性最差宕机时丢失的数据量取决于系统最后一次刷盘的时间点完全不可控。我的忠告是如果追求性能不如直接不开 AOF别开了 AOF 又选 no给自己一种安全的错觉。需要说明一点everysec的最多丢 1 秒也不是绝对的。如果 Redis 进程崩溃AOF buffer 里的数据还在内存里自然丢了但如果是操作系统崩溃已经调用了 write 写入了内核缓冲的数据理论上还有机会落盘但极端断电场景下丢失范围可能超过 1 秒。所以everysec 最多丢 1 秒是一个工程上的经验值不是数学证明。3.2 AOF 重写为什么文件会巨大又怎么把它压缩回去AOF 的致命缺陷是文件会无限膨胀。同一个 key 被反复更新 100 万次日志就会追加 100 万条命令而实际上恢复时只需要最后一条。因此 Redis 提供了 AOF 重写机制bgrewriteaof它的工作方式不是简单删日志而是 fork 子进程读当前内存数据生成一条条重建当前状态的命令重新生成一个最小的 AOF 文件。比如一个 key 已经加到了 100日志里可能是一百条 INCR重写后只剩一条SET key 100。AOF 重写由两个自动条件控制见默认配置auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb意思是当前 AOF 文件大小比上次重写后的基准文件大小增长了 100% 时且文件超过 64 MB才触发重写。如果业务写入量很大可以调低percentage让重写更频繁减少日志膨胀带来的磁盘压力。重写流程里有个容易忽略的细节在子进程重写 AOF 期间主进程仍在处理写命令这些新命令会同时追加到旧的 AOF 文件以及写入重写缓冲区。等子进程生成新 AOF 文件完成后主进程会把重写缓冲区里的增量命令追加到新文件尾部然后原子替换旧文件。理解了这段流程你就会明白为什么重写期间如果磁盘 IO 过载主进程也可能被阻塞。所以在高写入场景下要留意 AOF 重写对主进程的影响。3.3 AOF 损坏后的急救redis-check-aof 的使用AOF 是文本日志长时间运行难免因为断电、磁盘坏道等因素出现文件尾部截断或中间损坏。Redis 启动时如果检测到 AOF 文件有误默认情况下会拒绝启动把可用性直接掐死。这时候要用自带的修复工具redis-check-aof --fix appendonly.aof修复工具会把损坏的部分从文件中移除尽量保留前面完好的日志。实际操作中如果你能确认损坏只发生在文件末尾修复后大概率能恢复大部分数据如果损坏发生在文件中间修复工具会截断到损坏点之前的内容那样从损坏点到文件末尾的数据就全丢了。所以一个成熟的方案是AOF 文件每天做一次异地备份修复不了时至少能用前一天的备份兜底。3.4 AOF 的优点与代价以及它对启动加载的垄断地位AOF 的最大优势是可恢复性精确配合everysec能把数据丢失窗口控制在 1 秒左右这比 RDB 的分钟级不确定窗口优质得多。加上 AOF 是纯文本命令流人也能读懂排查时可以直接 tail 文件看看发生了什么写入。但 AOF 的代价也很明显文件体积通常远大于等量的 RDB 快照恢复时要把所有命令逐条重放启动耗时会明显高于 RDB。而且随着 key 变更频率上升AOF 的写入放大对磁盘性能的压力也更大。这些缺点在高吞吐、重写入场景下会被放大。正因如此AOF 虽然数据更安全却始终无法完全替代 RDB因为 RDB 在文件体积和恢复速度上有着结构性优势。4. RDB 与 AOF 的正面对决一张表格看清它们的一切差异很多文章喜欢把 RDB 和 AOF 描述成二选一的对立关系但我在实际项目里更愿意把它们看成两种各有取舍的方案。在 Redis 4.0 之前你确实要在两者之间做抉择但如今主流 Redis4.0 之后早已支持混合持久化这个二选一已被打破。不过在此之前我们还是把两者最核心的差异点摆到台面上。维度RDBAOF存储格式二进制压缩后的内存快照追加式 Redis 协议文本命令流数据安全性两次快照之间可能丢失大量数据everysec 最多丢 1 秒always 最多丢 1 条命令文件体积紧凑远小于 AOF通常体积数倍于 RDB需要定期重写恢复速度快二进制直接加载慢需逐条重放写命令对主进程的影响bgsave 期间 fork COW内存可能暴涨每次写请求追加日志always 模式性能损耗显著可读性二进制文件无法直接读文本协议可以读可以用来排查持久化周期周期性全量快照持续追加命令细粒度记录使用场景冷备份、快速重启、灾难恢复对数据丢失容忍度低的业务主存储这里最值得反复强调的是恢复速度的差异。RDB 加载 1 GB 快照也许只要几秒AOF 要回放几百万条命令动辄几十秒甚至几分钟。恢复时间长意味着故障期间 Redis 不可用的窗口被拉长这在生产环境中会直接放大故障影响。但 AOF 能多恢复 99% 的数据对一个业务系统来说这两者孰轻孰重只能由业务方自己权衡。此外当 AOF 和 RDB 同时存在时Redis 启动会优先加载 AOF 文件。原因也很朴素AOF 中的状态更新数据更完整。如果 AOF 文件存在且合法Redis 会忽略 RDB 文件直接加载 AOF如果 AOF 损坏则会报错退出不会自动降级到 RDB。这个优先级在生产应急时非常关键——如果你手头只有 RDB而 AOF 又是坏的处理起来会非常棘手。5. 混合持久化Redis 4.0 之后的最优解兼顾速度与安全单看 RDB 和 AOF总觉得成年人才做选择两个我都想要。Redis 4.0 也确实给了一个全都要的方案混合持久化。开启方式是在配置文件中设置aof-use-rdb-preamble yes。混合持久化的思路很巧妙在 AOF 重写时子进程不生成纯命令流的 AOF 文件而是先以 RDB 格式写入当前内存快照再在末尾追加重写期间的新增写命令。最终得到的文件前半段是二进制 RDB 快照后半段是 AOF 命令日志。作用非常直观启动加载时Redis 先快速加载 RDB 部分恢复绝大部分数据再回放尾部少量 AOF 命令补齐期间增量恢复速度接近 RDB数据安全性接近 AOF。这样的文件依然以.aof为后缀Redis 7.0 之后内部还会拆分成 base 文件和增量文件配合 manifest 管理但底层逻辑没有变快照打底 日志兜尾。我在生产环境里配置 Redis 持久化时的默认选择就是混合持久化 appendfsync everysec。这个组合在绝大多数业务场景下性能损耗可以忽略数据丢失窗口在秒级而且重启恢复非常快。当然它也有前提Redis 版本必须在 4.0 以上且 AOF 必须开启。如果你的 Redis 还是 2.x、3.x 的老版本我建议尽早升级不是为了新特性而是为了持久化这个级别的基础能力能跟上现代化运维的要求。需要提醒的是混合持久化不是万能药。开启后 AOF 文件的前半段是二进制格式普通文本工具无法直接读取所以用日志排查问题的能力会被削弱——你要拿 RDB 段的工具才能分析。但这和它带来的恢复速度收益相比我认为完全值得。6. 生产环境选型建议与踩坑实录6.1 什么场景该选 RDB什么场景该选 AOF什么场景两个都要说一千道一万选型最终要回归业务需求。我按常见的几类使用场景给一套选型参考纯缓存场景可容忍丢失重构比如页面缓存、热点数据缓存背后有数据库兜底丢了重新查库即可。这种场景可以只开 RDB 或者干脆只靠主从复制追求最小性能损耗。RDB 在这里的意义主要是加速冷启动而不是数据安全。有状态业务不可容忍大量丢失比如 session、分布式锁、任务队列、秒杀库存。这种场景必须上 AOF而且建议开启混合持久化保留秒级丢失窗口。太在意数据的人甚至可以考虑每写必 fsyncalways前提是扛得住 IO 压力。冷备与容灾无论主用哪种持久化我都建议至少每天凌晨用bgsave生成一份 RDB 快照并异地备份。AOF 能保住秒级数据但 AOF 文件出问题或者误操作时RDB 就是你的最后一道保险。容灾级别特别高的金融/账务类场景不推荐单靠 Redis 持久化。任何持久化机制都做不到物理机突然被挖走还能毫发无损。这种场景应该考虑 Redis 主从 哨兵 双机热备 同步落库到消息队列层层冗余而不是把所有宝压在 RDB 或 AOF 上。6.2 我踩过的几个坑希望你一个都别踩第一个坑是save直接用在生产环境。总有人图方便在故障应急时敲一个save以为性能差不多。实际上数据量大时主进程会硬生生阻塞住阻塞时间可能达到数十秒。到时候快照是生成了线上服务也卡成狗了。正确操作永远是bgsave除非你明确知道此刻线上流量为零否则不要用save。第二个坑是不关注stop-writes-on-bgsave-error yes。之前有一台 Redis 因为磁盘满了bgsave 一直失败Redis 按默认配置开始拒绝所有写命令结果业务方收到的现象是缓存写入全部报错。事后排查才发现磁盘满了。这个参数如果保持默认一定要配套磁盘容量监控如果改为 no就要自己背负快照失败但不阻塞写入的数据风险。没有绝对的好坏重点是你要知道这个开关的存在。第三个坑是 fork 后内存暴涨被系统 OOM。脚本里写死bgsave之后直接等待结果实例内存本来就用了 90%fork 之后 COW 又复制了大量内存页直接触发 OOM killer 把 Redis 干掉了。解决思路是为 Redis 实例预留足够内存并监控 fork 耗时。INFO stats里的latest_fork_usec能直接看到最近一次 fork 的耗时如果这个值飙升到几万微秒以上说明实例内存太大或者机器负载过高需要介入。第四个坑是 AOF 里存在FLUSHALL这种合法但致命的命令。如果业务里有人执行了FLUSHALL清空库随后 Redis 重启加载 AOF会把你清空的动作也重放一遍。修复办法是执行FLUSHALL后立刻使用BGREWRITEAOF重写 AOF让文件里的状态回到当前确实为空的形态避免重放旧的清空命令。当然权限管控和应急流程前置是另一回事。第五个坑是恢复流程里 AOF 损坏导致连环故障。有一次备份服务器宕机我们把主库 AOF 拷贝过来启动时发现文件尾部有坏数据Redis 拒绝启动。当时第一反应是删掉 AOF 用 RDB 恢复结果 RDB 还是昨天凌晨的丢了近一天的数据。后来复盘认为正确顺序应该是先用redis-check-aof --fix修复 AOF如果修复不了再决定是否接受 RDB 的丢失窗口。这个顺序直接决定了故障损失的上限。6.3 面对面试官时怎么把持久化讲得既深又稳Redis 持久化几乎是后端面试的必问考点但从我这些年当面试官的经历看能真正把这题答出深度的人不多。我建议从这几个层次递进回答第一层概念层面能流畅说出 RDB 和 AOF 的定义、默认配置、触发方式、优缺点。第二层原理层面能画出 bgsave 的 fork COW 过程能讲清楚 AOF 三种 fsync 策略的取舍能说清 AOF 重写的完整流程子进程快照 重写缓冲区 原子替换。这一层已经能淘汰大多数人。第三层工程层面能结合具体业务场景给出选型方案能说明混合持久化解决了什么问题、为什么 Redis 启动优先加载 AOF、COW 对内存容量的影响怎么监控。这层是区分背过八股和真正干过的分水岭。面试官常常追问RDB 和 AOF 到底该选哪个这时候千万不要直接说选 AOF就完事。更好的回答是先说明两者各自的核心价值和代价再结合我前面提到的场景分类说明自己的选择逻辑。比如你可以说如果是缓存场景我更看重恢复速度和性能用 RDB如果是有状态场景我用混合持久化加 everysec既拿到 AOF 的秒级安全性又拿到 RDB 的快恢复速度。这样的回答既见技术深度又见实战思维。6.4 一套可以直接抄作业的持久化配置参考最后给出一套我个人比较推荐的基准配置适用大多数中大型业务实例。你可以在这基础上结合业务做微调。# RDB 配置 save 3600 1 save 300 100 save 60 10000 dbfilename dump-${PORT}.rdb dir /data/redis stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes # AOF 配置 appendonly yes appendfilename appendonly-${PORT}.aof appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-use-rdb-preamble yes # 重写与持久化期间的不阻塞保护 no-appendfsync-on-rewrite no参数含义简单解释一下save规则我调宽了时间窗降低无谓的高频 bgsaveappendonly yes开启 AOFappendfsync everysec平衡安全与性能aof-use-rdb-preamble yes开启混合持久化no-appendfsync-on-rewrite默认 no意思是 AOF 重写时不暂停 fsync避免重写期间数据安全等级下降如果你对磁盘 IO 极敏感可以考虑临时置为 yes但一般没必要。配置落地后建议做两件事一是用CONFIG REWRITE将当前配置写入配置文件避免服务重启后配置丢失二是主动执行一次BGREWRITEAOF确认混合持久化文件和日志输出都正常再模拟一次重启观察加载时间。很多生产事故都源于配置改完没验证等真出了问题才发现配置压根没生效。7. 最后再啰嗦几句实操习惯持久化这东西选型一旦定下来平常看起来毫无存在感但只要出问题就是大问题。我个人的习惯是每个 Redis 实例启用持久化之后都会在监控面板上加上三个指标——rdb_last_bgsave_status、rdb_last_cow_size、aof_last_write_status。前两个看快照和 COW 状态第三个看 AOF 写入是否有错误。这三个指标任何一个出现异常都值得立刻拉起告警排查而不是等到故障发生后才去看日志。顺带分享一个偏门的排查技巧当你怀疑 RDB 或 AOF 文件有问题但又不想立刻重启实例时可以用redis-check-rdb dump.rdb和redis-check-aof appendonly.aof做离线体检文件是否完整、会不会报错几秒钟就能给你结果。别等真到恢复现场再去试错那时候时间就是金钱。如果你刚接触 Redis我的建议是不要跳过持久化直接去研究集群、分布式锁这些花活。把 RDB 和 AOF 这两兄弟吃透你会理解为什么 Redis 能同时做到高性能和数据安全也会对系统设计中性能、一致性、复杂度的三角关系有更深的体感。纸上得来终觉浅找个测试环境开两个实例一个配 RDB 一个配 AOF往里面灌数据、重启、看日志、看恢复时间十分钟亲手验证比看十遍文档都管用。
返回列表