zoukankan      html  css  js  c++  java
  • RDB持久化

    RDB持久化功能:将Redis在内存中某一个时间点的数据库状态经过压缩保存到磁盘上的一个RDB二进制文件里面,避免数据意外丢失,
    通过RDB二进制文件可以还原生成RDB二进制文件那个时间点的数据库状态,

    RDB文件的创建: 内存 => 磁盘

    1. save命令: 阻塞Redis服务器进程,直到RDB文件创建完毕为止
      执行期间,服务器进程不能处理客户端命令请求

    2. bgsave命令: 派生出一个子进程,由子进程负责创建RDB文件,
      执行期间,服务器进程(父进程)仍然可以处理客户端命令请求,
      出于进程竞争和性能问题,save、bgsave、bgrewriteaof命令不能同时执行

    RDB文件的载入: 磁盘 => 内存

    RDB文件的载入工作是在服务器启动时自动执行的,
    执行路径:src/server.c/main => src/server.c/loadDataFromDisk

    如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态,
    如果服务器关闭了AOF持久化功能,那么服务器才会使用RDB文件来还原数据库状态

    自动间隔性保存

    通过设置服务器配置的save选项,可以让服务器每隔一段时间自动执行一次bgsave命令,
    save选项可以设置多个保存条件,但只要任意一个条件被满足,就会执行bgsave命令,

    // 触发保存rdb文件
    for (j = 0; j < server.saveparamslen; j++) {
        struct saveparam *sp = server.saveparams+j;
    
        /* Save if we reached the given amount of changes,
            * the given amount of seconds, and if the latest bgsave was
            * successful or if, in case of an error, at least
            * CONFIG_BGSAVE_RETRY_DELAY seconds already elapsed. */
        if (
            // 是否达到了给定的更改量
            server.dirty >= sp->changes &&
            // 是否达到了给定的秒数
            server.unixtime-server.lastsave > sp->seconds &&
            // 上次尝试bgsave的Unix时间是否已经过大于5秒 or 上次尝试bgsave是否成功
            (server.unixtime-server.lastbgsave_try > CONFIG_BGSAVE_RETRY_DELAY || server.lastbgsave_status == C_OK))
        {
            serverLog(LL_NOTICE,"%d changes in %d seconds. Saving...",
                sp->changes, (int)sp->seconds);
            rdbSaveInfo rsi, *rsiptr;
            rsiptr = rdbPopulateSaveInfo(&rsi);
            // 执行rdb文件保存操作
            rdbSaveBackground(server.rdb_filename,rsiptr);
            break;
        }
    }
    

    分析RDB文件

    1. 人工分析
      使用-cx参数调用od命令,同时以ASCII编码和十六进制格式打印RDB文件
        od -cx check-dump.rdb
    
    1. 使用Redis带有的RDB文件检查工具redis-check-dump

    2. 使用其它处理RDB文件的工具

    源码阅读

    1. RDB文件的创建: src/rdb.c/rdbSave
    2. RDB文件载入: src/rdb.c/rdbLoad
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    第二次
    第一次
    win下less自动编译脚本
    厦门攻略游记
    npm常用命令
    青岛旅行规划及玩后感
    kissynode run on windows解决方案,contextify nodejs windows solution
    win nodejs下 findit只返回第一个文件问题
    jetty自动添加path的问题
    微博输入框统计
  • 原文地址:https://www.cnblogs.com/phonecom/p/15129380.html
Copyright © 2011-2022 走看看