Redis官方提供了两种持久化的方式来将数据存储到硬盘上
快照(Snapshot):保存这一时刻的数据状态
AOF(Append only File):之追加日志文件,将所有的redis写命令记录到日志文件中。
快照持久化
- 这种方式可以将某一时刻的所有数据写到的硬盘上,当然也是redis默认开启的一种方式,因为生成的文件是.rdb文件,所以又可以叫做rdb方式。
快照的生成方式
1.客户端方式生成:BGSAVE和SAVE
BGSAVE:客户端可以使用这个命令来创建一个快照,放接受客户端BGSAVE时,redis会使用fork来创建一个子线程,子线程用来生成这一时刻的快照写入磁盘中,主线程也还可以接受请求处理请求。
SAVE:在接受SAVE命令时,客户端不会再出口i请求,而是等生成rdb文件时才会处理请求,会造成redis阻塞。
aof持久化
1.特点
这种方式可以将所有的客户端的命令记录代日志文件中,AOF之旧话会被执行的写命令写到AOF文件中,所以只要从头到尾执行一次AOF文件就可以恢复所有的数据
2.AOF持久化的开启
再redis的默认设置中,并没有开启AOF持久化,

3.日志的追加频率
- alway(谨慎使用):每个redis写命令都会被写入硬盘中,从而将发生系统崩溃时出现的数据丢失减少到最少,但是对系统硬盘进行大量的操作,所以redis处理命令的速度收到限制。
- everysec(推荐):没秒执行一次同步显示的将多个命令同步到硬盘中。
- no(不推荐):由操作系统决定何时同步。
4.AOF带来的问题
持久化的文件越来越大,我们条用incr test100次,文件就会保存100次,其中99次多是多余的,为了压缩aof的持久化文件,redis提供了AOF文件重写的操作
执行BGREWRITEAOF 不会阻塞redis服务
当地一次的AOF文件到达64M时,就会紫红触发一次重写机制,当重写之后的文件达到文件大小的两倍时,会再次触发重写机制。
5,重写机制
AOF的重写机制并不是读取旧的AOF文件,而是用新的文件去替代,
- . redis调用fork ,现在有父子两个进程 子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令
- . 父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来。这样就能保证如果子进程重写失败的话并不会出问题。
- . 当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
- 现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。



1086

被折叠的 条评论
为什么被折叠?



