redis(10)AOF持久化

1、AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的,在AOF文件中,除了用于指定数据库的select命令是服务器自动添加的之外,其他都是我们之前通过客户端发送的命令

2、服务器启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态

3、AOF持久化功能的实现可以分为命令追加(append),文件写入、文件同步(sync)三个步骤

4、命令追加

当打开aof功能,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态aof_buf缓冲区末尾

5、aof文件的写入与同步

5.1、redis的服务器进程就是一个事件循环,这个循环中,文件事件负责接收客户端命令请求,以及向客户端发送命令回复,时间事件则负责执行像servercron函数这样需要特定运行的函数,服务器每次结束一个事件循环之前,它都会调用flushappendonlyfile函数,考虑是否需要将aof_buf缓冲区中的内容写入和保存到aof文件里

5.2、flushappendonlyfile函数行为由appendfsync选项值来决定

always 将aof_buf缓冲区的所有内容写入并同步到aof文件 效率慢,机器故障不丢失数据

everysec 默认值  将aof_buf缓冲区中所有内容写入到aof文件,如果上次同步aof文件时间,距离现在超过一秒钟,那么再次对aof文件进行同步,并且这个同步操作是由一个线程专门负责执行的 效率有保证,机器故障丢失一秒钟数据

no 将aof_buf缓冲区的所有内容写入到aof文件,但并不对aof文件进行同步,何时同步由操作系统决定 效率高,机器故障丢失数据不确定

6、aof文件的载入与数据还原

6.1、重新执行一遍aof文件里面保存的命令就可以还原服务器关闭前的数据库状态

6.2、步骤 创建不带网络连接的伪客户端 读取文件一条命令,执行,读取下一行 执行,知道文件末尾

7、为了解决aof文件体积膨胀问题,redis提供了aof文件重写功能,redis可以撞见一个新的aof文件来替代现有的aof文件,新旧两个数据库状态相同,但是新的不会包含任何浪费空间的冗余命令,由紫禁城执行,子进程不是线程,可以在避免使用锁情况下,保证数据安全性,

8、子进程执行重写带来数据库状态不一致问题,解决这个问题,创建一个重写缓冲区,子进程执行重写命令期间,新命令会先写入aof缓冲区,然后写入aof重写缓冲区,最后追加到新的aof文件里面

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在w...
    空语阅读 5,525评论 0 2
  • 企业级redis集群架构的特点 海量数据 高并发 高可用 要达到高可用,持久化是不可减少的,持久化主要是做灾难恢复...
    lucode阅读 6,584评论 0 7
  • 知识点 AOF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态 AOF文件中的所有命令都以Redis...
    wh4763阅读 3,538评论 1 0
  • redis的持久化有两种方式:RDB和AOF。 RDB持久化功能是将某个时间点的数据库状态保存到一个RDB文件上(...
    黑金星阅读 1,490评论 0 1
  • 本文是《Redis开发与运维》的学习笔记。内容大部分摘自此书。 众所周知,redis是内存数据库,它把数据存储在内...
    大数据Zone阅读 3,610评论 0 3

友情链接更多精彩内容