redis ——AOF持久化

python 未结 0 133
网络营销与管理
网络营销与管理 2021-07-22 14:48
悬赏:35
本帖最后由 小江哥 于 2018-11-22 19:28 编辑

redis 提供了AOF 和RDB 持久化功能。AOF 持久化是通过保存redis服务器所执行的写命令来记录数据库状态的,如下图所示:            
1 AOF 持久化的实现可以为追加,文件写入,文件同步三个步骤。
      命令追加
       当AOF持久化功能处于打开状态时,服务器在执行完一个写入命令之后,会以协议格式将被执行的写入命令追加到服务器状态的aof_buf缓存区的末尾:
                 struct redisServer{
                      //  ....
                       // aof 缓存区
                      sds aof_buf;
                     // ...
}:
       举个例子,如果客户端向服务器发送以下的命令:
     redis>set key value
     ok
      那么服务器在执行这个set命令后,会将以下协议内容追加到aof_buf缓存区的末尾:
       .3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvaluse\r\n
2     AOF 文件的写入与同步
      redis 的服务器进程就是一个事件循环,这个循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令
回复,而时间事件则负责执行像servercrom 函数这样需要定时运行的函数。
       因为服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓存区里面,所以在服务器每次结束一个事件循环以前,它都会调用flushAppendonlyfile 函数,考虑是否需要将aof_buf缓存区中内容写入和保存到AOF 文件里面。这个过程可以用伪代码来表示:
                                      
      如果用户没有主动为appendfsync选项设置值,那么appendfsync 选项的默认值为everysec.
      举个例子,假设服务器在处理文件期间,执行了以下三个写入命令:     
                           
                             
     如果这时flushappendonlyfile 函数被调用,假设服务器当前appendfsync 选项的值为everysec ,并且距离上次同步AOF
文件已经超过1 秒钟,那么服务器会先将aof_buf 中的内容写入aof文件中,然后再对aof文件进行同步。
                                      









相关标签:
回答
  • 消灭零回复
提交回复