每日八股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增量命令,完成恢复。

相关推荐
莫得感情 o4 小时前
Redis 05 · 持久化:RDB 与 AOF 怎么保证数据不丢
redis·缓存
curd_boy5 小时前
【Redis】Redis从缓存到AI向量平台
人工智能·redis·缓存
莫得感情 o6 小时前
Redis 02 · 数据结构:String 到 Stream 怎么选
redis
devpotato7 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
NeverFear79212 小时前
【黑马点评】短信登录
java·redis·tomcat·intellij-idea
攻城有术13 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
spencer_tseng13 小时前
kylin redis-6.2.14.tar.gz
linux·redis·kylin·edis-6.2.14
xbgRS13 小时前
Redis基本概念及应用
redis·缓存
草莓熊Lotso14 小时前
【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南
linux·网络·数据库·redis·tcp/ip·缓存·bootstrap
λqaq714 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存