1.RDB是什么?
在指定得时间间隔内生成内存中整个数据集得持久化快照。快照文件默认被存储在当前文件夹中,名称为dump.rdb,可以通过dir和dbfilename参数来修改默认值。
也就是行话来讲得Snapshot快照,它恢复时将快照文件直接读到内存里。
持久化过程中,Redis会单独创建一个(fork)一个子进程来进行持久化,子进程会先将数据写入到一个临时文件中,待持久化过程结束了,再用这个临时文件替换上次持久化好的RDB文件。整个过程中,主进程不进行任何的IO操作的,这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。
注:fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量,环境变量,程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。
我对RDB很熟悉,那你说一下你是怎么备份的?
RDB是整个内存的压缩过的Snapshot,RDB的数据结构,可以配置复合的快照触发文件
你就可以说,默认
1分钟内改了1万次,
或5分钟内改了10次,
或15分钟内改了1次
换句话说,Redis后台有一个监控调度一样,帮你默默的做工作
关于禁用
总结 如何出发RDB快照
1.配置文件中默认的快照配置
在redis中设置值的时候会产生dump.rdb文件
最好是主机和备份机器是两台,防止硬件损坏
2.命令save或者是bgsave
这两个命令都可以迅速形成dump文件进行备份
注意:
save只管保存,其他的不管,全部阻塞。就是我在save的时候,数据就灌不进来了,redis就相当于哥们先等一下,我先把备份这件事情干了,你再弄新的数据,所有说一般备份都在晚上完成;
bgsave:Redis后台异步进行快照操作,快照同时还可以响应客户端请求,可以lastsave命令获取最后一次成功执行快照的时间。
3.执行flushall命令,也会产生dump.rdb文件,但里边是空的,没有意义。
如何恢复
将备份文件(dump.rdb)移动到redis安装目录并启动服务即可。就能自动的从硬盘文件里边读回内存
优势:
适合大规模的数据恢复,对数据完整性和一致性要求不高;也就是说你一步小心把redis给kill了,那最近的数据给搞丢了
劣势:
在一定的间隔时间做一次备份,所以如果redis意外down的话,就会丢失最后一次快照后的所有修改
fork的时候,内存的数据被克隆了一份,大致2倍膨胀性需要考虑内存的空间
小总结: