redis持久化存储RDB,Redis DataBase的缩写。默认redis采用的就是rdb模式的持久化存储方式。

1 基本配置介绍

在redis.conf的配置文件中体现与RDB相关的配置在SNAPSHOTTING下,基本配置解释如下:

  1. # 当save后配置为一个空的字符串时,代表关闭rdb
  2. save ""
  3. # 以下是redis默认提供的保存策略,3600s内只要有一次变化(包括新增、修改、删除等)
  4. # 都会触发redis内存中的数据持久写入磁盘。
  5. save 3600 1
  6. save 300 100
  7. save 60 10000
  8. # 当进行后台持久化时,如果存在错误,那么将停止写操作。
  9. stop-writes-on-bgsave-error yes
  10. # 开启dump文件压缩
  11. rdbcompression yes
  12. # 开启文件校验
  13. rdbchecksum yes
  14. # 落盘文件名称默认是dump.rdb
  15. dbfilename dump.rdb
  16. # 当同时停用RDB和AOF是才会生效,删除用于复制的RDB文件。默认关闭
  17. rdb-del-sync-files no
  18. # 工作目录,持久化文件存放位置;
  19. dir /data

2 基本原理解释

在以上配置文件中提到过save相关配置,当满足条件时(比如3600s出现一次变化)就会执行bgsave指令产生dump.rdb文件。那么身情况下更进行持久化的操作呢?

  • save:save操作是会阻塞接受新的写操作;
  • bgsave:就是backgroundsave,后台执行,当执行bgsave时,redis会fork一个子进程来完成持久化的操作;

    1. [root@hanju data]# ls # 刚开始没有dump.rdb文件
    2. [root@hanju data]# redis-cli
    3. 127.0.0.1:6379> AUTH 123456
    4. OK
    5. 127.0.0.1:6379> BGSAVE # 执行bgsave指令
    6. Background saving started
    7. 127.0.0.1:6379> exit
    8. [root@hanju data]# ls # 产生了dump.rdb文件
    9. dump.rdb
  • 在配置文件内配置save 10 2,当满足条件后台也是执行的bgsave;

    1. [root@hanju data]# rm -rf dump.rdb
    2. [root@hanju data]# ls
    3. [root@hanju data]# redis-cli
    4. 127.0.0.1:6379> AUTH 123456
    5. OK
    6. 127.0.0.1:6379> mset k1 v1 k2 v2 # 使用mset设置两个key,查看文件是否产生;
    7. OK
    8. 127.0.0.1:6379> exit
    9. [root@hanju data]# ls
    10. dump.rdb
  • 主从架构时,当slave节点从master节点同步数据时,会触发master节点进行全量备份;

RDB的特点:

  • dump.rdb文件是一个二进制文件,占用磁盘空间较小,恢复的时候也比较快;
  • 每一次备份都是全量备份;
  • 执行落盘操作的时候,产生的数据会丢失;
  • 在fork子进程进行持久化操作时存在一定的开销;