rdb工作原理:
每隔N分钟或者N次写操作以后,从内存dump数据形rdb文件,压缩放在备份的目录下面。
配置rdb的配置,在redis.conf配置
测试rdb的功能:
1为了测试简单
改为
save 900 1
save 300 10
save 60 100
1分钟执行100条命令,就会生成rdb文件
2在执行测试命令之前,先往redis设置一个key-value对
set site www.baidu.com
3用redis自带的命令来测试,执行120条命令
4 执行完毕以后会发现在当前目录下面生成rdb文件。
5 设置第二个键值对set name wangli
6重启redis,连接客户端,会发现site的键值对在redis中,但是name的键值对消失了,这是因为在重启的时候,会自动导入rdb文件到redis中,由于1分钟执行100次才会生成rdb文件,所以在执行测试命令之前 设置的site键值对,已经生成在rdb文件中,可是后来设置的name的键值对仅仅在120次命令以后才设置,(在100次的时候会生成一次rdb文件,剩下的20次还不够资格再一次生成rdb文件)还没有到导入rdb的条件,所以rdb里面没有这个键值对。图如下
7 rdb持久化的优缺点:
优点:由于是一整块快照,恢复速度非常快。
缺点:在两个保存点之间,断电会丢失n分钟数据,出于对持久化更精细的需求,redis推出了aof方式持久化。
RDB最重要的两个过程是rdbSave和rdbLoad
触发rdbSave过程,主要有4种方式:
1. SAVE命令
2. BGSAVE命令
3. master接收到slave发来的sync命令
4. 定时save(配置文件中制定)
第一种情况,Redis保存RDB文件是在主进程中进行,所以在这其间,Redis无法响应客户端请求(再次强调:Redis是单线程Server);第二种情况,Redis fork出一个子进程,然后在子进程中进行rdbSave,因此也就不会阻塞主进程对客户端请求的处理;第三种情况和第四种情况同第二种情况,也是在子进程中进行;
触发rdbLoad过程,主要有两种方式:
1. Redis启动时候的初始化;
2. slave接收到master发来的RDB文件;