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
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    grep如何忽略.svn目录,以及如何忽略多个目录
    CSS写的提示框(兼容火狐IE等各大浏览器)
    校验IPv4和IPv6地址和URL地址
    input框设置onInput事件只能输入数字,能兼容火狐IE9
    $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
    jQuery EasyUI 教程-Tooltip(提示框)
    小知识随手记(一)
    自动换行效果对比
    getComputedStyle与currentStyle获取样式(style/class)
    弹出层框架layer快速使用
  • 原文地址:https://www.cnblogs.com/phonecom/p/15129380.html
Copyright © 2011-2022 走看看