数据库
首页 > 数据库> > Redis持久化

Redis持久化

作者:互联网

数据持久化

RDB持久化

AOF持久化

AOF持久化分为命令追加、文件写入、文件同步三个步骤。

  1. 命令追加。当服务器执行完一个写命令,会以协议格式添加到RedisServer的aofBuf缓冲区末尾。

    class RedisServer {
        // aof缓冲区
        private String aofBuf;
    }
    
  2. 写入和同步。Redis的服务器进程是一个事件循环,这个循环中的文件事件负责接收客户端请求并响应,时间时间则是执行serverCron函数这样定时运行的行数。在处理文件事件时可能存在redisServer的aofBuf写入,所以需要进行判断是否写入aofBuf的内容到文件中。伪代码如下

    while(true) {
        // 处理文件事件,接收命令和响应,可能存在redisServer的aofBuf写入
        processFileEvents();
        // 处理时间事件
        processTimeEvents();
        // 由于可能存在aofBuf写入,所以需要进行判断是否写入aofBuf的内容到文件中
        flushApendOnlyFile();
    }
    

    flushApendOnlyFile函数的行为由服务端配置决定包含三种

    • always:aofBuf全部写入并同步

    • everysec(默认):aofBuf全部写入,同时每秒进行同步,由单独线程进行同步操作

    • no:aofBuf全部写入单不同步

AOF通过读取文件还原命令并通过伪客户端执行的方法对数据库状态进行还原。

AOF重写用于解决时间流逝导致AOF文件不断增长的膨胀问题。这个功能是通过读取服务器现有状态然后生成aof文件遵守的原则是尽可能小

标签:AOF,持久,aof,写入,aofBuf,Redis,private,BgSave
来源: https://www.cnblogs.com/ccoder/p/15242247.html