Redis持久化方式RDB 和AOF的实现原理、优缺点

Redis 持久化方式有哪些?

RDB实现原理

RDB 持久化

AOF实现原理

AOF 持久化

AOF重写机制

RDB 与 AOF的优缺点


Redis持久化方式RDB 和AOF的实现原理、优缺点

Redis 持久化方式有哪些?

Redis 本身是一个基于 Key-Value 结构的内存数据库,为了避免 Redis 故障导致数据丢失的问题,所以提供了 RDB 和 AOF 两种持久化机制。

可以参考这篇文章:Redis 持久化

RDB实现原理

RDB 是通过快照的方式来实现持久化的,也就是说会根据快照的触发条件,把内存里面的数据快照写入到磁盘, 以二进制的压缩文件进行存储。

Redis中AOF和RDB持久化策略的原理 redis持久化rdb和aof工作原理_java

RDB 持久化

RDB持久化是通过快照的触发,方式有很多,比如:

        1. 执行 bgsave 命令触发异步快照        

        2. 执行 save 命令触发同步快照,同步快照会阻塞客户端的执行指令。

        3. 根据 redis.conf 文件里面的配置,自动触发 bgsave

        4. 主从复制的时候触发

AOF实现原理

客户端执行一个数据变更的操作,Redis Server 就会把这个命令追加到 aof 缓冲区的末尾,然后再把缓冲区的数据写入到磁盘的 AOF 文件里面, 至于最终什么时候真正持久化到磁盘,是根据刷盘的策略来决定的。 

Redis中AOF和RDB持久化策略的原理 redis持久化rdb和aof工作原理_数据库_02

AOF 持久化

它是一种近乎实时的方式,把 Redis Server 执行的事务命令进行追加存储。 

AOF重写机制

另外,因为 AOF 这种指令追加的方式,会造成 AOF 文件过大,带来明显的 IO 性能问题,所以 Redis 针对这种情况提供了 AOF 重写机制,也就是说当 AOF 文件的大小达到某个阈值的时候,就会把这个文件里面相同的指令进行压缩。 

Redis中AOF和RDB持久化策略的原理 redis持久化rdb和aof工作原理_aof_03

RDB 与 AOF的优缺点

RDB 是每隔一段时间触发持久化,因此数据安全性低,AOF 可以做到实时持久化数据安全性较高

RDB 文件默认采用压缩的方式持久化,AOF 存储的是执行指令,所以 RDB数据恢复的时候性能比 AOF。

没有最好只有最合适,建议RDB 与 AOF一起用!!!