redis支持2种持久化方式,一种是RDB方式,一种是AOF方式;前者是根据指定的规则定时将内存中的数据存储在磁盘中,后者是在每次执行命令后将命令记录下来.

RDB方式

过程:
根据设定的规则自动将内存中的数据生成一份副本存储到硬盘上,即生成一份数据快照存储.
规则:

    save 900 1   (900秒有一个键被改变则进行快照)  
    save 300 10  
    save 60 10000  

这是redis安装目录下的redis.conf文件中默认的RDB方式的规则.

原理:

  1. redis使用fork函数复制一份当前进程的副本
  2. 父进程继续接受客户端发送过来的消息,而子进程开始将内存中的数据写入硬盘中的临时文件
  3. 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此完成一次快照操作.

优缺点:
一旦redis意外退出,就会丢失最后一次快照以后的所有数据,如果是比较重要的数据,就会损害很大,而AOF方式可以解决这个问题.

AOF方式

过程:
每次将每一条写命令记录到AOF文件中(不是写命令的结果数据).
原理:
将有关修改数据的命令行全部记录到AOF文件中,然后启动恢复的时候,逐个执行AOF文件的命令将磁盘中的数据载入内存中,因此它会比 RDB的方式慢一些. 可以通过配置 appendonly yes来开启.

优缺点: 启动恢复的速度相对RDB慢些,但是丢失的信息比RDB方式更少,数据更安全些.

最后

可以同时启动2种方式进行持久化,AOF方式保障了数据安全性,而RDB方式保证了备份文件.