【rdb】
rdb保存二进制的东西。Bgsave进行Redis持久化单独创建一个与当前一模一样的进程进行持久化,会先将数据存入一个临时文件,待持久化结束之后,在用临时文件替换上次的临时文件。整个过程中主进称不进行任何的io操作。是将数据存入磁盘文件中,dump.rdb文件。如果是默认配置的话,只在当前目录下会有临时备份文件,换一个目录启动并不会有持久化文件存在。但是一般项目中都会在Redis.Conf中修改配置文件到特定目录下。Dbfilename 文件名,dir文件存储的目录
* 默认进行rdb持久化shutdown没有aof,会触发;
* 执行命令save或者bgsave;save只管保存,其他不管,引起阻塞。Bgsave会在Redis后台fork进程进行备份。
* redis是有主从复制模式的,如果开启了主从复制模式rdb是关不掉的。主从复制的原理就是主机把rdb文件发送给从机的。
【aof】
aof比rdb持久化丢失的数据少,不会2秒以上。相较rdb会比较耗时间。aof将执行的除了读操作的命令字符串存入文件中。默认一秒钟执行一次(但是可能会产生一秒数据丢失)。如果改成no会等待操作系统进行调用,always一旦数据发生变化那么就会执行,消耗很多的系统资源。可以在redis.conf的appendonly进行修改。
【aof重写机制】
重写就是给append.aof瘦身的,减去一些重复的命令。大小默认达到64M就进行重写机制,生产环境是一定要对auto-aof-rewirite-min-size 64mb进行修改的。还有一个指标是Auto-aof-rewirite-percentage。第一次重写之后,下一次按照这个比例来进行配置,如果瘦完身之后文件大小为40,那么下一次瘦身的大小是40*比例的数值进行触发。
【Redis4.0之后提供的混合持久化方式】
混合持久化默认是关闭的,aof-use-rdb-preamble参数进行控制的,混合持久化是通过bgrewriteaof完成的,不同的是混合持久化开启之后,fork出的子进程先将共享内存以rdb的形式写入aof文件中,然后再将重写缓存区的增量命令以aof方式写入到文件中,写入后通知主进程统计信息,然后将新的aof替换旧的aof文件。
混合持久化结合了rdb和aof两种方式,加载速度更快,数据丢失更少
兼容性差,一旦开启了混合持久化4.0之前的版本是不识别aof文件的