redis-RDB持久化

redis-RDB持久化

  • RDB持久化

    Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。

  • Redis 保存和载入 RDB 文件的流程。
    • 有两个Redis命令可以用于生成RDB文件,一个是save,另一个是bgsave
      • save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求
      • bgsave命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求

digraph {      label = "\n图 10-5    创建和载入 RDB 文件";      rankdir = LR;      splines = polyline      //      node [shape = circle, width = 1.3, height = 1.3];      state [label = "数据库状态"];      rdb [label = "RDB 文件"];      //      edge [minlen = 2.5];      state -> rdb [label = "rdbSave"];      rdb -> state [label = "\nrdbLoad"];  }

  • 记录了服务器触发自动 BGSAVE 条件的 saveparams 属性。

    struct redisServer {
        ...
        // 保存save配置参数
        struct saveparam *saveparams;
        ...
    };
    
    struct saveparam {
      	// 设定的秒数
        time_t seconds;
        // 规定时间内的修改次数
        int changes;
    };
    
    

digraph {      label = "\n图 10-6    服务器状态中的保存条件";      rankdir = LR;      node [shape = record];      //      redisServer [label = " redisServer | ... |  saveparams | ... "];      saveparams [label = " { { saveparams[0] | seconds \n 900 | changes \n 1 } | { saveparams[1] | seconds \n 300 | changes \n 10 } | { saveparams[2] | seconds \n 60 | changes \n 10000 } } "];      //      redisServer:saveparams -> saveparams;  }

  • 记录服务器最后一次执行 SAVE 或者 BGSAVE 的时间, 以及自最后一次保存 RDB 文件以来, 服务器进行了多少次写入的 lastsave 属性和 dirty 属性。

    digraph {      label = "\n图 10-7    服务器状态示例";      rankdir = LR;      node [shape = record];      //      redisServer [label = " redisServer | ... | dirty \n 123 | lastsave \n 1378270800 | ... "];  }

  • RDB 文件的总体结构

digraph {      label = "\n图 10-10    RDB 文件结构";      node [shape = record];      rdb [label = " REDIS | db_version | databases | EOF | check_sum "];  }

  • RDB 文件中的databases结构

digraph {      label = "\n图 10-13    RDB 文件中的数据库结构";      node [shape = record];      database [label = " SELECTDB | db_number | key_value_pairs "];  }

  • RDB文件中不带过期时间的key_value_pairs键值对结构

digraph {      label = "\n图 10-16    不带过期时间的键值对";      node [shape = record];      kvp [label = " TYPE | key | value "];  }

  • 带有过期时间的key_value_pairs键值对结构。

1669385059434)]

  • 带有过期时间的key_value_pairs键值对结构。

digraph {      label = "\n图 10-17    带有过期时间的键值对";      node [shape = record];      kvp [label = " EXPIRETIME_MS | ms | TYPE | key | value "];  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值