A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小江哥 黑马粉丝团   /  2018-11-22 19:28  /  1476 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小江哥 于 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文件进行同步。
                                      









1 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2018-11-29 12:19:11
沙发
到此一游
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马