Redis的RDB持久化

作者: lintong | 来源:发表于2015-03-10 16:03 被阅读220次
1:为什么Redis需要持久化?

Redis是内存型数据库,一般被用于缓存,所以Redis需要将数据持久化到硬盘中。

2:RDB持久化的原理是什么?

RDB是采用二进制压缩文件的方式将数据库内容保存到文件中。
数据库在启动的时候会检查是否有RDB文件,然后将其载入数据库。
系统一般有两种方式来创建RDB文件,即阻塞型和非阻塞型,其底层都是调用同一个函数,但是非阻塞型会先派生出一个子进程,然后由子进程执行备份功能。
RDB文件的创建条件是根据在制定时间段内执行的操作次数:通过三个数据结构来实现该功能。首先是struct saveparam数组,该数组是配置参数

struct saveparam{
    time_t seconds;//时间段
    int changes;//修改次数
}

然后通过dirty修改计数器来记录服务器距离上次BGSAVE后对数据库的修改次数。
以及使用time_t lastsave来记录上次BGSAVE的时间点。
通过serverCron守护进程来周期检测是否满足RBD持久化条件

3:RDB文件格式是什么?

这一部分是RDB持久化的重点,首先要知道RDB文件格式:

REDIS|db_version|database|EOF|check_sum
  • REDIS是用来标识RDB文件
  • db_version用来记录RDB文件的版本号
  • database存储数据库信息
  • EOF是用来表示RDB文件的结尾
  • check_sum用于校验,以防止文件被破坏,校验内容为前面全部

对于database部分,又分为:

SELECTDB|db_number|key_value_pairs
  • SELECTDB用于标示即将读入一个数据库号码
  • db_number用于标示数据库号码(Redis可以存储多个数据库)
  • key_value_pairs用于保存数据库的kv值(Redis是键值数据库)
    其中key_value_pairs格式又分为两类:
    如果带有过期时间,则格式为
EXPIRETIME_MS|ms|TYPE|key|value

否则为:

TYPE|key|value

因为Redis的key都是字符串编码,所以TYPE主要用于标示VALUE的编码,具体的编码格式参见:《Redis设计与实现》一书。

相关文章

  • Redis缓存持久化策略

    Redis RDB持久化原理 简介:rdb持久化方案配置讲解,redis的开发者是怎么实现rdb的 rdb持久化配...

  • Redis持久化

    Redis持久化方式有两种:RDB和AOF。 1 RDB持久化 RDB(Redis Database)持久化是把当...

  • redis-2

    redis-2 redis的持久化 Redis 提供了 RDB 和 AOF 两种持久化方式。 RDB RDB 是把...

  • 03-redis持久化

    Redis持久化 两种方式持久化: RDB持久化 - 全量 AOF持久化 - 增量 RDB持久化 RDB文件的生成...

  • Redis的持久化方式:RDB和AOF

    一,redis的持久化方式:RDB和AOF RDB,即Redis Database RDB持久化方式:在指定的时间...

  • redis mongodb持久化的方式

    redis持久化方式(两种) RDB持久化 redis提供了RDB持久化的功能,这个功能可以将redis在内存中的...

  • 「高频面试题」Redis的持久化方式有哪些?

    RDB RDB(Redis DataBase)持久化是把当前Redis中全部数据生成快照保存在硬盘上。RDB持久化...

  • 2020-02-21 记录redis(8)

    redis持久化,两种持久化方式: RDB方式 AOF方式 持久化的使用方式: RDB 优势: 1、redis的数...

  • Redis-分布式缓存(一)

    零、本文纲要 一、单机Redis的问题二、Redis持久化(一)RDB持久化(二)AOF持久化(三)RDB与AOF...

  • Redis 持久化

    Redis 持久化 RDB RDB 持久化方式类似于快照,执行 SAVE BGSAVE命令时可以触发 RDB 持久...

网友评论

    本文标题:Redis的RDB持久化

    本文链接:https://www.haomeiwen.com/subject/adovxttx.html