redis之持久化方式RDB详解

redis之RDB持久化详解

和传统的数据库不一样,redis是将数据保存在内存中的,这种方式如果redis挂掉,那么数据将全部丢失,当然这是不被允许出现的情况,因此而有了持久化这个概念,所以简单来说持久化是为了防止数据的丢失,将内存中的数据保存到硬盘中去。redis提供了两种持久化的方式:RDB和AOF,其中RDB是默认方式。

RDB:
rdb的持久化方式:在一定的时间间隔内将数据集的内存快照(snapshotting)保存到硬盘中去。

rdb的原理:他其实是通过fork一个子进程来专门进行持久化,会先将数据写入到一个临时文件里面,然后待持久化全部结束之后,再将这个临时文件去替换上次已经持久化好的文件(dump.rdb)。这个全程他的服务进程是不用去操作的,所以启动效率很高,性能也比较好,但是会在redis突然挂掉的时候,会出现最后一次数据丢失的问题。至于原因下面会讲到

配置文件:redis.conf 在snapshotting的配置中

redis之持久化方式RDB详解_第1张图片
save就是在一定时间间隔内,进行多少次数据写操作就会触发内存快照然后把dump.rdb进行保存。如果我这一次dump.rdb文件保存好了,我继续进行写操作,然后redis挂掉了,还没来得及触发下一次,因此最后一次写的数据就会丢失!

关于数据恢复这一块,手动码了个小demo,因为时间原因我把save 300 10 改成save 120 10 2分钟比较快一点

现在这个redis目录下已经有dupm.rdb文件了
redis之持久化方式RDB详解_第2张图片
然后我进行写操作 在2分钟内写10次
redis之持久化方式RDB详解_第3张图片
此时会被保存到硬盘中去,但是实际公司操作的时候,备份文件肯定不会还是在你机器上的,我就通过复制一份文件模拟备份到其他机器上去了
在这里插入图片描述

然后如果我此时清空数据,并强制关掉redis
这边就不截图了,就是flushall/shutdown命令

然后此时再重启之后,按理说我应该会直接把硬盘中的dump.rdb直接加载到内存中来,但是看截图
在这里插入图片描述
此时并没有数据,为什么呢?
其实这是因为在flushall,shutdowm的时候清空数据的那一刻,他会立刻生成一个dump.rdb文件,并保存到硬盘中,此时文件是空的,所以也就没有数据。大家其实可以看rdb文件的生成时间,就能看出来,如果后续自己操作的时候,这边就不再截图了=-=
所以此时要通过拿其他机器上的备份文件来进行数据恢复
我这边i 就直接讲dump2替换成dump模拟一下
然后再进行重启
就会发现神奇的一幕!!!!!!
数据回来了
redis之持久化方式RDB详解_第4张图片

关于另外一种AOF的方式下一张在做说明

你可能感兴趣的:(redis,数据库,mysql,redis,mysql,数据库)