redis中的AOF持久化是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
AOF持久化
它也是Redis持久化的重要手段之一,aof->Append Only File,只追加文件,也就是每次处理完请求命令后都会将此命令追加到aof文件的末尾。而RDB是压缩成二进制等时机开子进程去干这件事。
RDB 和 AOF
antirez 在《Redis 持久化解密》一文中讲述了 RDB 和 AOF 各自的优缺点:
RDB 是一个紧凑压缩的二进制文件,代表 Redis 在某个时间点上的数据备份。非常适合备份,全量复制等场景。比如每6小时执行 bgsave 备份,并把 RDB 文件拷贝到远程机器或者文件系统中,用于灾难恢复。
Redis 加载 RDB 恢复数据远远快于 AOF 的方式
RDB 方式数据没办法做到实时持久化,而 AOF 方式可以做到。
AOF持久化的步骤
1、命令追加步骤
首先服务器将对数据库的写操作命令放入AOF缓冲区中,并通过周期函数来检查是否需要将缓冲区内的内容写入AOF文件中(一般有三种策略:always,everysecond,no)。这三种策略是在安全性与效率之间的平衡。
2、数据还原
通过创建一个不带网络连接的伪客户端,并依次执行AOF中的命令,从而实现数据的还原。
3、AOF重写
因为AOF是记录写操作命令,会导致文件的冗余,只要通过对数据库当前状态的重新读出,从而可以实现AOF的精简。
具体流程如下:
首先创建一个子进程(为什么不用线程呢?因为线程会造成锁,导致效率低下。而且用子进程不会阻塞父进程)
然后父进程创建一个AOF重写缓冲区,用于记录在AOF重写期间执行的写入命令。
一个写命令会同时发送给AOF缓冲区和AOF重写缓冲区。
然后等到重写完成,子进程向父进程发送信号,父进程会将AOF重写缓冲区的内容追加的新的AOF文件中,并原子化的替换原先的AOF文件。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注小编,感谢您对小编的支持。