redis持久化原理

redis持久化原理

1. RDB

RDB是redis持久化的其中一种方式,redis通过将数据保存在RDB文件中避免数据意外丢失,关于RDB,需要知道:

  • 如何创建与载入RDB文件?
  • 自动保存功能如何实现?
  • RDB文件结构
  • RDB实际使用

1.1 RDB文件的创建与加载

两个命令生成RDB文件,sava和bgsave,前者阻塞服务器进程,也可以设置自动保存,而后通过后者真正创建RDB文件,后者通过一个服务器进程的子进程创建RDB文件,不会阻塞服务器进程
载入RDB文件是在服务器启动的时候自动执行的,只要检测的RDB文件,就会自动执行。
如果先执行了BGsave,再执行save就会被拒绝,这样做是为了防止父进程和子进程之间产生竞争。

2.2 自动间隔保存

  1. redis可以通过命令实现一种自动间隔时间内保存数据的功能,具体是使用save命令:

    1. save 900 1(表示如果900秒之内,至少出现了一次修改就保存)
    2. save 300 10(表示如果300秒之内,至少出现了10次修改保存)
    3. save 60 10000(表示如果60秒之内,至少出现了10000次修改保存)
  2. 数据结构

    1. 服务器状态结构:RedisServer
      redisServer保存了服务器状态,里面有一个saveparam数组,表示save命令设置的保存条件。

      1
      2
      3
      4
      5
      6
      7
      8
      struct redisServer{
      //记录了保存条件的数组
      struct saveparam * saveparam;
      //dirty计数器
      long long dirty;
      //上一次执行保存的时间
      time_t lastsave;
      };
      1
      2
      3
      4
      5
      6
      struct saveparam{
      //秒数
      time_t seconds;
      //修改数
      int changes;
      };

      saveparam

    2. 修改计数器:dirty计数器
      dirty:记录距离上一次成功执行save命令或者bgsave命令之后,服务器对数据库状态进行了多少次修改。
    3. 时间记录:lastsave
      lastsave:记录了服务器上一次执行save或者bgsave命令的时间。