redis持久化总共有3种方式,RDB持久化,AOF持久化,reids 4.0后的混合持久化
RDB持久化
- RDB持久化可以在指定的时间间隔内生成数据的时间点快照,这个快照文件是一个压缩的二进制流文件;
- RDB是一个非常紧凑的文件,它保存了redis在某个时间点的数据集,这种文件非常适合备份;
- RDB可以最大化redis性能:父进程在保存RDB文件时唯一要做的事情就是fock出一个子进程,然后这个字进程就会处理接下来的所有保存工作,父进程无需处理任何磁盘I/O操作;
- 可以对RDB进行设置,比如说,save 60 100,那么60s内至少有1000个键被改动时,就会自动保存一次数据。
AOF持久化
- AOF持久化记录redis服务器执行的所有写操作命令,并在服务器启动时执行这些命令来还原数据集;
RDB缺点
- 如果你需要尽量避免服务器故障时而丢失数据,那么RDB则不适合你,比如你设置5分钟保存一次快照,那么在这种情况下,一旦服务器发生故障,则会丢失这几分钟的数据;
- 每次保存RDB时,都会fock出一个子进程,由子进程来执行实际的持久化工作。在数据集比较庞大时,fock可能会非常耗时,造成服务器在某某毫秒内停止处理客户端的操作;
AOF缺点
- 对于相同的数据集来说,AOF都比RDB文件体积更大,所以AOF恢复得速度会慢于RDB
redis 4.0后混合持久化
- redis混合持久化其实就是一个改进的aof持久化,它会对aof文件重写时直接生成二进制流rdb压缩文件,当服务器有写操作时,会把这个命令行追加到aof文件末尾,相当于是rdb格式+aof格式,解决了以前aof启动数据恢复慢的问题
AOF和RDB该如何选择?
- 如果你非常关心你的数据,且能承受数分钟以内的数据丢失,那么你可以只使用RDB;
生产环境可以都启用,redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据,因为aof
一般来说数据更全一点。
