zoukankan      html  css  js  c++  java
  • Redis的AOF与RDB

    AOF持久化的实现

    AOF持久化的实现可以分为命令追加、文件写入和文件同步三个步骤。

    struct redisServer {
        sds aof_buf;/* AOF buffer, written before entering the event loop */
    }
    

    AOF持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾.

    AOF重写

    Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多。 由于AOF重写是会进行大量写写入操作,势必为长时间阻塞主进程,因此redis把重写程序放到子进程执行。

    这样做有两点好处:

      1)子进程重写期间,主进程可以继续处理命令。
    
      2)子进程带有主进程的数据副本,这样就可以避免与主进程竞争db->dict,这是线程实现不了的。
    
      重写期间,主进程继续处理命令,对数据库状态进行修改,这样使得当前的数据库状态与重写的AOF文件
    

    所保存的数据库状态不一致。因此,redis设置了AOF重写缓冲区,在创建子进程后,主进程每执行一个写命令都会写到重写缓冲区。在子进程完成重写后,主进程会将AOF重写缓冲区的数据写入到重写的AOF文件,保证数据状态的一致。

    RDB持久化

    RDB的持久化方式是将内存数据以快照的形式写入磁盘文件,并在Redis启动的时候,通过此文件恢复内存数据的状态。

    使用sava语句可能会阻塞主线程,所以使用bgsave

    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    Redis(二)——常用数据类型的命令
    爬山
    [Usaco2003 Open]Lost Cows
    Noip2017 小凯的疑惑——提高组D1T1
    Noip2017 跳房子——普及组
    Noip2017 棋盘——普及组
    Noip2017 图书管理员——普及组
    Noip2017 成绩——普及组
    java 简单计算器
    java 自定义异常处理
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12436676.html
Copyright © 2011-2022 走看看