# Redis持久化和主从复制原理

持久化的两种方式:RDB + AOF

  • RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的全局持久化。
  • AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销,所以很快,有点像Mysql中的binlog。

RDB更适合做冷备,AOF更适合做热备

tip:两种机制全部开启的时候,Redis在重启的时候会默认使用AOF去重新构建数据,因为AOF的数据是比RDB更完整的。

# RDB

优点:

  • 可以恢复到之前某一时间点的数据
  • 数据恢复的时候速度比AOF来的快。

缺点:

  • 默认五分钟甚至更久的时间才会生成一次,意味着你这次同步到下次同步这中间五分钟的数据都很可能全部丢失掉。AOF则最多丢一秒的数据
  • RDB在生成数据快照的时候,如果文件很大,客户端可能会暂停几毫秒甚至几秒

# AOF

优点:

  • AOF是一秒一次去通过一个后台的线程fsync操作,最多丢一秒的数据
  • AOF在对日志文件进行操作的时候是以append-only的方式去写的,他只是追加的方式写数据,自然就少了很多磁盘寻址的开销了,写入性能惊人,文件也不容易破损。
  • 适合做灾难性数据误删除的紧急恢复;AOF的日志是通过一个叫非常可读的方式记录的,这样的特性就适合做灾难性数据误删除的紧急恢复了,比如公司的实习生通过flushall清空了所有的数据,只要这个时候后台重写还没发生,你马上拷贝一份AOF日志文件,把最后一条flushall命令删了就完事了。

缺点:

  • 一样的数据,AOF文件比RDB还要大。