每日八股day17

本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写,如有错误纯属本人实力不佳,欢迎各位大佬阅读指正

1.RDB 是什么?原理、触发方式、优缺点?

RDB是Redis的内存快照持久化机制,会把某一时刻内存中的全部数据生成一个压缩的二进制快照文件保存到磁盘。

原理:

通过 fork子进程,利用写时复制COW技术后台写入RDB文件,主线程可以继续处理请求。

触发方式:

手动触发,bgsave后台异步执行,save会阻塞,线上不用。

自动触发,按配置save规则自动生成、主从全量复制,执行shutdown时都会自动触发RDB。

优点:

文件体积小,数据恢复速度快,适合备份和灾备。

缺点:

两次快照之间宕机会丢失数据,fork大内存实例时可能出现短暂卡顿。

2.AOF 是什么?日志刷写策略三种?

AOF是Redis的日志追加式持久化机制,他不记录数据快照,而是把每一条写命令以文本形式追加到对应的日志文件中,重启时,Redis会重新执行一遍AOF里面所有命令来恢复数据。

优点:数据安全性远高于RDB,可做到秒级丢失甚至不丢失。

缺点:AOF文件通常比RDB大,数据恢复速度比RDB慢。

三种策略:

always:每次写命令都立即同步刷盘,数据最安全,基本不丢失,性能最差。

everysec:每秒异步刷盘一次,性能较好,最多丢失1秒数据,是推荐默认配置。

no:由操作系统决定何时刷盘,性能最高,但丢失数据的风险最大。

3.AOF 重写机制原理、为什么要重写?

原理:

Redis主线程fork一个子进程

子进程根据当前内存里的最新数据,直接生成一套最小化的写命令,写入新的AOF文件。

主线程在重写期间,新的写命令会同时写到,原AOF文件和AOF重写缓存区。

子进程写完新AOF后,主线程会把缓存区里的新命令追加到新文件末尾。

原子替换旧AOF文件,完成重写,整个过程不阻塞主线程,也不会丢失重写期间的新命令。

为什么要重写:

随着运行时间变长,AOF日志文件会越来越大,重复无效命令过多,文件过大恢复速度慢占用空间,影响Redis性能。

4.RDB 和 AOF 对比区别、各自适用场景?

RDB:是快照,某一时刻全量数据二进制文件,恢复快,文件小。

AOF:是日志,逐条记录命令,数据更安全,文件更大,恢复慢。

丢数据:RDB可能丢一整段数据,AOF最多丢1秒数据。

性能:RDB主线程压力小,AOF每秒刷盘有轻微开销。

恢复速度:RDB远快于AOF。

适用场景:

RDB:数据冷备,灾备,大数据量快速恢复,对性能要求极高,允许少量数据丢失。

AOF:数据不能丢,核心业务,数据安全性优先,写多读少场景。

5.混合持久化原理(RDB+AOF 混合)?

Redis混合持久化就是重启时先用RDB快照恢复数据,再用AOF增量日志补全。

原理:

AOF重写时,直接以RDB全量数据作为文件前半部分,重写之后的增量命令以AOF日志形式写在后半部分。

重启恢复时:

先加载RDB内容,快速恢复大部分数据,再执行后面的AOF日志,补全最新数据。

优点:

恢复速度接近RDB,数据安全性和AOF一样高,兼顾速度与安全是现在默认推荐方案。

6.Redis 宕机后数据恢复流程?

先判断是否开启AOF,优先使用AOF恢复。

如果没有AOF则再使用RDB快照文件恢复。

开启混合持久化时,先加载文件中的RDB全量数据,再执行后续的AOF增量命令,完成恢复。

相关推荐
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙3 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除3 天前
redis--018
redis
两锭子3 天前
Redis基础
redis
烟沙九洲3 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索3 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞3 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路3 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog3 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis