redis持久化存储RDB,Redis DataBase的缩写。默认redis采用的就是rdb模式的持久化存储方式。
1 基本配置介绍
在redis.conf的配置文件中体现与RDB相关的配置在SNAPSHOTTING下,基本配置解释如下:
# 当save后配置为一个空的字符串时,代表关闭rdbsave ""# 以下是redis默认提供的保存策略,3600s内只要有一次变化(包括新增、修改、删除等)# 都会触发redis内存中的数据持久写入磁盘。save 3600 1save 300 100save 60 10000# 当进行后台持久化时,如果存在错误,那么将停止写操作。stop-writes-on-bgsave-error yes# 开启dump文件压缩rdbcompression yes# 开启文件校验rdbchecksum yes# 落盘文件名称默认是dump.rdbdbfilename dump.rdb# 当同时停用RDB和AOF是才会生效,删除用于复制的RDB文件。默认关闭rdb-del-sync-files no# 工作目录,持久化文件存放位置;dir /data
2 基本原理解释
在以上配置文件中提到过save相关配置,当满足条件时(比如3600s出现一次变化)就会执行bgsave指令产生dump.rdb文件。那么身情况下更进行持久化的操作呢?
- save:save操作是会阻塞接受新的写操作;
bgsave:就是backgroundsave,后台执行,当执行bgsave时,redis会fork一个子进程来完成持久化的操作;
[root@hanju data]# ls # 刚开始没有dump.rdb文件[root@hanju data]# redis-cli127.0.0.1:6379> AUTH 123456OK127.0.0.1:6379> BGSAVE # 执行bgsave指令Background saving started127.0.0.1:6379> exit[root@hanju data]# ls # 产生了dump.rdb文件dump.rdb
在配置文件内配置save 10 2,当满足条件后台也是执行的bgsave;
[root@hanju data]# rm -rf dump.rdb[root@hanju data]# ls[root@hanju data]# redis-cli127.0.0.1:6379> AUTH 123456OK127.0.0.1:6379> mset k1 v1 k2 v2 # 使用mset设置两个key,查看文件是否产生;OK127.0.0.1:6379> exit[root@hanju data]# lsdump.rdb
主从架构时,当slave节点从master节点同步数据时,会触发master节点进行全量备份;
RDB的特点:
- dump.rdb文件是一个二进制文件,占用磁盘空间较小,恢复的时候也比较快;
- 每一次备份都是全量备份;
- 执行落盘操作的时候,产生的数据会丢失;
- 在fork子进程进行持久化操作时存在一定的开销;
