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