00:00
各位同学大家好,接下来给大家介绍案例的下半场,手动触发,那也就是要完成我们的这句话,OK。用save或BG save命令手动的达到我们的数据备份,那接下来就要给同学们简单的唠唠,那杨哥已经有自动触发了,这不挺好的吗?一定的时间间隔内保存。保存保存,你干嘛还要人工干预,因为啊,我们这是教学,我这儿说了个东西叫五秒两次修改,实际生产上可不可能这么配。不可能,那假如说啊,你实际生产上你是配了十分钟啊,假设100次修改对吧,可是现在我有一个数据进来了,非常重要,它还没到十分钟呢,甚至还没到这100次,反正就是两个条件不满足,但是这块数据我也觉得非常重要,我想立刻现在马上闹要保存,那怎么办呢?就需要你进行手动触发,以即你执行这个命令以后,手动挡将会覆盖自动档,以最新的命令来进行保存,那么保存就好了,它为什么还要有两个命令呢?
01:10
来吧,所以red呢,给你做了非常非常非常充分的考虑,一个叫C,一个叫BGC,来,同学们请看。提供了两个命令来生成,手动生成啊啊DB文件,分别是save和BG save,我们这已经看到了,那么它这是怎么个工作的呢?那么他的无论任何时候ready。都需要dump这个数据集到Dis的话,那么将会发生这么一种情况,诶,Red FOX,然后呢,我们将会拥有一个子的和一个负的进程。然后呢,这个子的开始去写这个数据集到一个临时的RDB文件。我们前面说过,Linux这个fork是不是非常重要的一个系统的后台紫禁程。当这个紫禁城is但。
02:07
写的这个新的RDB文件的时候,它会替换这个什么旧的好,那么根据官网的说明,我们来说一下这个save和BG save,它们的原理都一个,只要你手工执行了,你可以把它理解为它后台开了一个子进程。可以立刻去备份我们的文件,这么说能跟上,那用我们Java多线程的思想来理解呢,有点类似于这样啊。像极了,它意思上接近啊,我们的go里面的future task和这个接口,我们在GU里面说过。来我的主进程干着活的,这个呢是一个red,我这这块啊set k1,然后V1SK2,那么V2啊,根据我们的砍配置,哥哥,你假设配了十分钟有100次修改,那么我就该自动保存,就自动保存,然后呢,形成我的RDB文件,OK没问题,那么现在。
03:14
突然我要立刻现在就要保存一个最新的,相当于说我们用手工触发save命令,或者是BG save直接拉出来的一个子进程。在不影响主进程的前提下,我们呢?后台多了一个程序,单独偷偷的去做备份,重新写到一个RDB临时文件里面来完成我们的备份,用新的再去替换老的,OK,好,这是他的思想。那接下来那杨哥我不服气。这货不就是新开个备份的紫禁城吗?对吧,刚才我们也看了这个官网了,那孩子啊老爸。
04:01
那。一个命令就能做的事儿,他为什么要用两个呢?这两个病例有什么区别呢?这个就学问大了,听好,生产上只允许用BGC,绝对不可以用safe。讲完了。杨哥求分解为什么,因为我们在用save的时候它干嘛?主程序会执行阻塞当前服务器,直到持久化工作完成。执行save命令期间不能处理其他命令。也就是说,这个时候你只要save来。你只要执行了这个save命令,对不起,收到了,我马上。终结我作为缓存服务器对外提供服务的这么一种功能,然后呢,我先去忙着最高优先级的先备份,用备份替代了缓存功能,是啊,你数据一致性肯定可以保证,但是你现在缓存是不是就功能缺失了,哎,所以说呢,这样的话呢,就是我解决了一个问题,又产生了一个新的问题,来同学们请看一下我们的案例。
05:10
现在save会产生什么阻塞再抓这我要先去完成我们的RDB的临时文件,最后再覆盖它,那么第一步set k一位接,然后第二步大家看没有什么产生吧,然后第三步我用save,然后大家请看,我只写了一个,我就立刻就被。打出来了,当然我这个数据少啊,不会产生阻塞,如果你这个。他呢?数据量很大,你现在要save,我是不是又批处理,要把一堆命令写进RDB,我忙着做这个的时候,那么是不是会导致我们的词产生,阻塞我们的服务器?缓存功能是不是就缺失了,哎,这样是非常严重的,好,那么同学们,我们给为了给大家演示好看,在当前路径下面,我删掉我们的弹,现在在当前路径下面。
06:02
空空如也来,那么现在sat k5V5,五秒内两次修改,现在我根本没有第二次,就算时间到了也不会保存对吧?那么同学们早就超过五秒了吧,没有,但是我SAVE1直行,同学们请看。啥情况,是不是蛋塔6379马上就被你强制性的刷,从内存刷回到硬盘上了,好,这个是好说当前我的数据咋的只有一到五这么一点,就是阻塞了也看不出。但是如果是什么。百万级别的,你要敢用这一个名字在生产上,那说吧,那全组人是送你走还是你自己走?OK,那么弟兄们写ready吗?坐牢的那种,OK,好,弟兄们,这是我们的第一个案例,那么第二个一定要用哪个BG save它呢?是这样一个情况。
07:03
上面会阻塞,我们当然希望下面这个是什么不阻塞,所以red会在后台异步的进行快照操作,那么就是你该做主线任务的继续提供缓存,我该备份保存的新起一个炉灶,咱们两个划分,两头说一体两面互不干扰,没有产生阻塞,所以快照同时还可以响应客户端的请求,该触发方式会复刻一个紫禁程,由紫禁程复制持久化的构成,那么官网说明同学们请看。保存这个DB in,什么back ground OK,所以说是后台做这个事敲门烟的,就把这个事呢给你搞定,那么来吧,下面呢,同学们请看,Red呢会使用BG save对单曲内存中的所有数据做一份快照,这个操作是谁子进程在后台完成的,这就允许主进程同时还可以提高缓存功能,两个不耽搁,那么。
08:00
杨哥,什么叫复课呢,这个呢稍我也简单的复习一下啊,不在我们这儿的重点讲解,因为我们在讲过。Linux和get的时候都说过,首先从get的角度,Fork啥等等。那是不是相当于说把当前的这份给我?腾一份,克隆一份,做一份副本,但是我不影响当前这个主进程吧。从操作系统的角度,就是Linux程序当中,内核里面fok会产生一个和父进程完全什么相同的子进程,但子进程在此后会执行,这个系统出于效率考虑,尽量呢,也不要太多,OK,所以说一个就够了,所以同学们请看啊,我们现在就变了,BG save只要一执行。那么FORK1份后台的紫禁权很快,它有没有产生阻塞,该去备份去备份,然后呢,新的RDB临时文件覆盖老的RDB,好,那么同学们和刚才一样,也给大家做一下演示,Set k6V6,同学们只改了一个,不会触发五秒两次,因为我只修改了一次,那么这个时候BG save啊,我还没执行,那么同学们请看当前是不是128 OK,好,马上BG save,请看后台弹出来的提示是不是都不一样,后台备份开始,那么就将会执行这个过程,那么同学们再来查一次,是不是从128变成了135,字节数的变化膨胀了说明。
09:25
备份保存数据成功,OK,好,那么同学们,这个就是我们的BG save和save它们的区别,那么再来看看我们的官网说明,它这还有一句话。你还可以使用last save这个命令来看看上一次的保存时间点是到什么一个程度,那么该怎么用呢?同学们请看last save的意思是可以通过这个命令获取最后一次成功执行快照的时间来,那同学们,那在write里面last。
10:00
Save。给了我这么一个时间戳,那么弟兄们,我们该如何把这个时间戳变成我们看得懂的时间呢?啊,这个时候同学们请看,就要用这获得,然后这date减D这么一个时间戳就可以拿下我们相关的数据,OK,那么当然这边是在Linux的侧啊,那么是date干D艾那然后呢,把这个拷贝过来,来兄弟们OK吧,那就可以获得我们对应的上一次我们保存的时间戳,好,那么同学们自动触发到手动触发,手动出发,由save和BG这两个病例,它们的区别和底层原理就给大家介绍到这儿。
我来说两句