become who you want to|

张三Blog

园龄:3年4个月粉丝:3关注:0

(每天一个面试小技巧)必问Redis持久化机制(AOF和RDB)以及生产过程持久化如何达到最优呢

首先祝大儿童们,六一儿童节快乐

1.RDB机制

RDB实则就是将数据以快照的方式进行存储,想必快照大家应该都知道吧类似说一张照片 或者是某个时间段的数据进行一个快照的存储 可想而之 就肯定避免不了数据丢失的问题 基本上的生产环境是不会去单独推荐使用的

1.1 RDB优点

  1. RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
  2. 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
  3. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

1.2 RDB缺点

大致和描述相同 会丢失一部分的数据 (快照之后的数据都会丢失)

2.AOF机制

AOF则不同 会将每一个收到的命令都通过(write,append)追加到文件中。

2.1 AOF的优点

  1. AOF的优点相比RDB来说可以更好的保证数据的完整性 每隔1s会就行一次插入操作 且写入性能高
  2. AOF日志文件过大的时候,会出现重写操作 但不会影响客户端的读写
  3. AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据

2.2 AOF的缺点

  1. 对于同一份数据而言AOF会比RDB的文件更大
  2. AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件(当然,每秒一次fsync,性能也还是很高的)

生产过程持久化如何达到最优呢?

大部分面试者都会说是AOF或者是RDB其中的一种 但很显然不是最优的
而应采用混合持久化的方式来进行持久化操作(在Redis4.X版本中发行)
而当开启了混合持久化后

  1. AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理
  2. 并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
  3. 于是在Redis重启的时候,可以先加载RDB的内容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重启效率大幅得到提升

混合持久化的文件格式
在这里插入图片描述

本文作者:张三Blog

本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503272.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   张三Blog  阅读(45)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起