华为面试官:Redis 挂了数据会丢失吗?如何保证数据不丢?我:缓存而已,丢了就丢了...
在线 Java 面试刷题已更新239题图文并茂https://www.quanxiaoha.com/java-interview面试考察点基础掌握度面试官不仅仅是想知道 RDB 和 AOF 的全称更是想知道你是否理解 Redis 作为内存数据库为什么需要持久化以及两种方案各自的实现原理和触发机制。对比分析能力考察你能否从数据安全性、文件大小、恢复速度、系统性能等多个维度对 RDB 和 AOF 进行全面对比并在实际场景中做出合理选型。生产实践经验是否能给出生产环境中的混合持久化方案Redis 4.0以及如何根据业务特点缓存场景 vs 存储场景选择持久化策略。核心答案Redis 提供了两种核心持久化机制RDBRedis Database和AOFAppend Only FileRedis 4.0 之后还支持混合持久化。对比维度RDBAOF持久化方式定时对整个内存数据做快照记录每一条写命令到日志数据安全性可能丢失最后一次快照后的数据最多丢失 1 秒数据everysec策略文件大小二进制压缩体积小命令日志体积大重写后可缩小恢复速度快直接加载二进制慢逐条回放命令系统性能影响fork子进程时有瞬间延迟取决于fsync策略适用场景冷备、灾难恢复、从库同步数据安全性要求高的主库一句话结论RDB 适合做定期全量备份恢复快但可能丢数据AOF 适合做实时增量备份数据更安全但文件大、恢复慢。生产环境推荐混合持久化RDB AOF。加入小哈的星球你将获得:专属的项目实战4个项目 / 1v1 提问 / 简历优化 /Java 学习路线 /社群讨论 /学习打卡 / 每月赠书《仿小红书》 微服务架构已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《Spring AI 应用RAG 智能客服》已完结, 基于 Spring AI Spring Boot 3.x JDK 21《秒杀系统设计》正在更新中单体到微服务高并发架构演进《前后端分离博客项目全栈开发》已完结,演示链接http://116.62.199.48/项目阅读地址https://quanxiaoha.com/column截止目前累计输出 120w 字讲解图 4013 张还在持续爆肝中..戳我加入学习解锁全部项目已有4500小伙伴加入深度解析一、RDB 持久化机制RDB 是 Redis 的默认持久化方式它会在特定条件下将内存中的所有数据生成一个二进制快照文件dump.rdb。img上图展示了 RDB 持久化的完整流程。核心要点如下fork()子进程Redis 主进程调用fork()创建子进程利用操作系统的写时复制Copy-On-WriteCOW机制子进程共享主进程的内存页。主进程继续处理客户端请求只有在内存页被修改时才会真正复制。生成 RDB 文件子进程将内存数据以二进制格式写入一个临时文件完成后替换旧的dump.rdb。主进程无阻塞整个过程中主进程可以正常处理读写请求不会阻塞仅在fork瞬间有短暂停顿。RDB 的触发方式自动触发在redis.conf中配置save规则save 900 1 # 900 秒内有至少 1 次修改就触发 save 300 10 # 300 秒内有至少 10 次修改就触发 save 60 10000 # 60 秒内有至少 10000 次修改就触发手动触发执行SAVE阻塞主进程不推荐或BGSAVE后台执行推荐命令。二、AOF 持久化机制AOF 以追加写日志的方式将每一条写命令记录到appendonly.aof文件中。img上图展示了 AOF 持久化的核心流程写入缓冲区每条写命令先追加到内存中的aof_buf缓冲区。刷盘策略由appendfsync配置项决定何时将缓冲区数据写入磁盘策略行为数据安全性能always每条命令都fsync最高基本不丢数据最差everysec每秒fsync一次最多丢 1 秒数据推荐折中no由操作系统决定刷盘可能丢失较多数据最好三、AOF 重写机制随着时间推移AOF 文件会越来越大。Redis 提供了AOF 重写Rewrite机制来压缩文件。imgAOF 重写的核心逻辑不是读取旧文件而是直接读取当前 Redis 内存中的数据状态用最少的命令重新生成一份 AOF 文件。触发方式自动触发auto-aof-rewrite-percentage 100文件大小比上次重写后增长 100%和auto-aof-rewrite-min-size 64mb文件最小达到 64MB。手动触发执行BGREWRITEAOF命令。四、混合持久化Redis 4.0Redis 4.0 引入了RDB AOF 混合持久化结合了两者的优势。img开启方式# 开启 AOF appendonly yes # 开启混合持久化 aof-use-rdb-preamble yes混合持久化的优势恢复速度快RDB 部分可以快速加载全量数据。数据安全性高AOF 部分记录最新变更保证数据完整性。文件体积小RDB 二进制格式比纯 AOF 命令日志更紧凑。面试高频追问追问一RDB 的fork()为什么不会阻塞主进程利用 Linux 的写时复制COW机制fork()创建子进程时并不真正复制内存只是共享父进程的内存页。只有当父进程修改某个内存页时才会复制该页。所以fork()本身非常快通常几毫秒子进程生成 RDB 期间主进程可以正常服务。但如果内存数据量很大比如几十 GBfork()可能会稍慢一些。追问二AOF 和 RDB 能不能同时开启可以同时开启。Redis 4.0 之前两者独立运行互不影响Redis 4.0 开启混合持久化后AOF 重写时会将 RDB 格式嵌入 AOF 文件实现优势互补。实际生产中建议同时开启用 AOF 保证数据安全用 RDB 做冷备。追问三Redis 宕机后恢复数据优先加载哪个文件如果同时存在 RDB 和 AOF 文件Redis优先加载 AOF因为 AOF 的数据完整性更高。如果只存在 RDB 文件则加载 RDB。如果都存在但 AOF 损坏可以使用redis-check-aof工具修复。常见面试变体变体一Redis 宕机数据会丢失吗如何保证数据不丢变体二生产环境 Redis 的持久化方案怎么选变体三RDB 和 AOF 各自的优缺点是什么变体四Redis 4.0 的混合持久化了解吗解决了什么问题记忆口诀RDB定期快照体积小恢复快但可能丢数据 —— 像拍照抓住某个瞬间的状态。AOF追加日志数据更安全但文件大恢复慢 —— 像录像记录每一个动作。混合持久化RDB 做底 AOF 补增量鱼与熊掌兼得。总结Redis 持久化是面试高频考点。RDB 是定时全量快照适合冷备和灾难恢复恢复速度快但有数据丢失风险AOF 是实时增量日志数据安全性更高但文件体积大、恢复慢。Redis 4.0 推荐使用混合持久化用 RDB 格式存储全量数据保证恢复速度用 AOF 命令记录增量变更保证数据完整性实现两者的优势互补。加入小哈的星球你将获得:专属的项目实战4个项目 / 1v1 提问 / 简历优化 /Java 学习路线 /社群讨论 /学习打卡 / 每月赠书《仿小红书》 微服务架构已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《Spring AI 应用RAG 智能客服》已完结, 基于 Spring AI Spring Boot 3.x JDK 21《秒杀系统设计》正在更新中单体到微服务高并发架构演进《前后端分离博客项目全栈开发》已完结,演示链接http://116.62.199.48/项目阅读地址https://quanxiaoha.com/column截止目前累计输出 120w 字讲解图 4013 张还在持续爆肝中..戳我加入学习解锁全部项目已有4500小伙伴加入1. 我的私密学习小圈子从0到1手撸企业实战项目~ 2. 得物二面Redis 中某个 Key 访问量特别大怎么办我Redis 能顶得住... 3. 面试官ZSet 的底层实现是什么修订版 4. 百度面试官Redis 内存满了怎么办你有想过吗最近面试BAT整理一份面试资料《Java面试BATJ通关手册》覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式点“在看”关注公众号并回复 Java 领取更多内容陆续奉上。PS因公众号平台更改了推送规则如果不想错过内容记得读完点一下“在看”加个“星标”这样每次新文章推送才会第一时间出现在你的订阅列表里。 点“在看”支持小哈呀谢谢啦