AOF(Append Only File)
用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常使用。
RDB(Redis DataBase)
内存数据的全量快照,即把内存数据都保存到磁盘。
save:主进程执行,会导致redis阻塞
bgsave:创建子进程进行RDB文件写入。
bgsave
同AOF的bgrewriteaof 一样: fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存和物理内存的映射索引表),这个拷贝过程会消耗大量CPU资源,拷贝完成之前整个进程是会阻塞的.
如果主进程仅做read操作,那么父子进程互不影响。若主进程做write操作,那么这块数据会复制一份生成数据副本,主进程修改此副本数据。bgsave子进程则继续将原有数据写入RDB文件
执行快照的频率
bgsave不会重复执行
当一个bgsave操作正在运行时,不会启动第二个bgsave子进程。这是因为Redis在执行bgsave操作时,会创建一个子进程来执行备份任务。如果一个bgsave操作已经开始,那么Redis不会再启动另一个bgsave操作,直到当前的bgsave操作完成或被取消。
频率不好控制
要想尽可能恢复数据,快照间隔就必须得短,但是频繁执行RDB备份,会有:
- 磁盘压力
- 进程拷贝频繁阻塞主进程
save选项可以设置多个保存条件,只要其中任意一个条件被满足,服务器就会执行bgsave命令。例如,可以设置服务器在900秒之内对数据库进行了至少1次修改,或者在300秒之内对数据库进行了至少30次修改,或者在60秒之内对数据库进行了至少10000次修改等。
混合持久化
Redis 6.0和5.0默认开启了aof-use-rdb-preamble。
当开启混合持久化时,Redis会先使用RDB方式将现有内存中的数据写入RDB文件,然后再将缓冲区中的增量命令以AOF方式写入AOF文件。在完成写入后,主进程会接收到通知,并将新的含有RDB和AOF两种格式的文件替换旧的AOF文件。
这样做的目的是同时利用RDB和AOF两种持久化方式的优点,即快速恢复数据和保证数据的完整性。
恢复时,Redis会优先使用AOF日志进行恢复。
标签:AOF,宕机,恢复,Redis,bgsave,内存,RDB,进程 From: https://www.cnblogs.com/kiper/p/17807190.html