Redis持久化方式RDB 和AOF的实现原理、优缺点
Redis持久化方式RDB 和AOF的实现原理、优缺点
Redis 持久化方式有哪些?
Redis 本身是一个基于 Key-Value 结构的内存数据库,为了避免 Redis 故障导致数据丢失的问题,所以提供了 RDB 和 AOF 两种持久化机制。
可以参考这篇文章:Redis 持久化
RDB实现原理
RDB 是通过快照的方式来实现持久化的,也就是说会根据快照的触发条件,把内存里面的数据快照写入到磁盘, 以二进制的压缩文件进行存储。
RDB 持久化
RDB持久化是通过快照的触发,方式有很多,比如:
1. 执行 bgsave 命令触发异步快照
2. 执行 save 命令触发同步快照,同步快照会阻塞客户端的执行指令。
3. 根据 redis.conf 文件里面的配置,自动触发 bgsave
4. 主从复制的时候触发
AOF实现原理
客户端执行一个数据变更的操作,Redis Server 就会把这个命令追加到 aof 缓冲区的末尾,然后再把缓冲区的数据写入到磁盘的 AOF 文件里面, 至于最终什么时候真正持久化到磁盘,是根据刷盘的策略来决定的。
AOF 持久化
它是一种近乎实时的方式,把 Redis Server 执行的事务命令进行追加存储。
AOF重写机制
另外,因为 AOF 这种指令追加的方式,会造成 AOF 文件过大,带来明显的 IO 性能问题,所以 Redis 针对这种情况提供了 AOF 重写机制,也就是说当 AOF 文件的大小达到某个阈值的时候,就会把这个文件里面相同的指令进行压缩。
RDB 与 AOF的优缺点
RDB 是每隔一段时间触发持久化,因此数据安全性低,AOF 可以做到实时持久化,数据安全性较高。
RDB 文件默认采用压缩的方式持久化,AOF 存储的是执行指令,所以 RDB 在数据恢复的时候性能比 AOF。
没有最好只有最合适,建议RDB 与 AOF一起用!!!