• 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/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    aspnet_Applications表结构
    SQL Server 2005下的分页SQL
    海量数据查询
    对比.NET PetShop和Duwamish来探讨Ado.NET的数据库编程模式
    style.behavior的用法
    网页制作小技巧:dl dt dd标签用法
    c#中out与ref的用法与区别
    VS2005集成VSS2005的方法
    自己动手写一个JQuery插件(第一篇)(转)
    java 实现二分查找法(转)
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12436676.html
Copyright © 2020-2023  润新知