代码改变世界

Redis的RDB持久化

2015-03-10  本文已影响220人  lintong
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

对于database部分,又分为:

SELECTDB|db_number|key_value_pairs
EXPIRETIME_MS|ms|TYPE|key|value

否则为:

TYPE|key|value

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

上一篇 下一篇

猜你喜欢

热点阅读