(每天一个面试小技巧)必问Redis持久化机制(AOF和RDB)以及生产过程持久化如何达到最优呢
首先祝大儿童们,六一儿童节快乐
1.RDB机制
RDB实则就是将数据以快照的方式进行存储,想必快照大家应该都知道吧类似说一张照片 或者是某个时间段的数据进行一个快照的存储 可想而之 就肯定避免不了数据丢失的问题 基本上的生产环境是不会去单独推荐使用的
1.1 RDB优点
- RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
- 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
- RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
1.2 RDB缺点
大致和描述相同 会丢失一部分的数据 (快照之后的数据都会丢失)
2.AOF机制
AOF则不同 会将每一个收到的命令都通过(write,append)追加到文件中。
2.1 AOF的优点
- AOF的优点相比RDB来说可以更好的保证数据的完整性 每隔1s会就行一次插入操作 且写入性能高
- AOF日志文件过大的时候,会出现重写操作 但不会影响客户端的读写
- AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据
2.2 AOF的缺点
- 对于同一份数据而言AOF会比RDB的文件更大
- AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件(当然,每秒一次fsync,性能也还是很高的)
生产过程持久化如何达到最优呢?
大部分面试者都会说是AOF或者是RDB其中的一种 但很显然不是最优的
而应采用混合持久化的方式来进行持久化操作(在Redis4.X版本中发行)
而当开启了混合持久化后
- AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理
- 并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
- 于是在Redis重启的时候,可以先加载RDB的内容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重启效率大幅得到提升
混合持久化的文件格式
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503272.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步