zoukankan      html  css  js  c++  java
  • AOF文件的写入与同步

    https://www.lizenghai.com/archives/133796.html

    在 Redis 中客户端向服务器发送相关写命令请求,这时服务器中有个用于处理这些命令的事件循环进程,对这些命令进行处理,并将相关信息处理的结果反馈给客户端,如:”OK”,等。同时,在这个期间,服务器中命令请求器会将相关写命令追加到 aof_buf 缓冲区和 aof_rewrite_buf 重写缓冲区。

    这个阶段服务器进程会处理这三个操作:

    (1)执行客户端的命令。

    (2)将执行后的写命令 append 入 aof_buf 中。

    (3)将执行后的写命令 append 入 aof_rewrite_buf 中。

     图 1 写命令追加到缓冲区中

    当进行 AOF持久化的时候,对于 aof_buf 中的数据需要写入并同步到 appendonly.aof 文件中。

    图 2  AOF持久化

    对于是否将 aof_buf 缓冲区中内容写入AOF文件中,由 redis.conf  配置文件中的 appendfsync 设置的值来决定,通过 flushAppendFIle 函数来进行相关操作。

    //事件轮询函数
    def evenloop():
      while True:
           ........
        //是否将 aof_buf 缓冲区中的内容写入并同步到 appendonly.aof 文件中。
           flushAppendOnlyFile()
    

      

             appendfsync 选项的值                                          flushAppendOnlyFile 函数的行为
    always 将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中(最安全,但性能差)
    everysec 将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中,如果上次同步 AOF 文件的时间距离现在超过 1 秒钟,那么会再次对 AOF 文件进行同步。 (安全,性能较好)

    no

    将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中,但不对 AOF 文件进行同步,何时进行同步一般有操作系统来决定。(一般为 30 秒,不安全,性能最好)

    对于操作系统来说,为了提高对文件的写入操作,一般都是等缓冲区满了或者设置了同步时间,才会将内存缓冲区中的数据写入到磁盘中,完成相关持久化工作。这就可以把写入操作比作把东西写到文本中,同步比作保存。如果没有进行保存,计算机宕机之后,写入文本中的数据会全部丢失。而对于 Redis 来说,要将缓冲区中的数据同步到 aof 文件中,才能避免 Redis 突然宕机后,进行相关数据信息的恢复操作。

  • 相关阅读:
    交互式输入编辑与历史命令补全
    string模板
    textwrap——文本包裹和填充模块解析
    python质量控制
    命令自动补全模块rlcomplete
    密码输入模块getpass
    交互模式启动配置文件
    pprint模块解析
    python基础知识--2字符串
    python基础知识--1注释
  • 原文地址:https://www.cnblogs.com/zhoading/p/13432197.html
Copyright © 2011-2022 走看看