00:00
各位同学大家好,接下来我们给大家介绍一个我们在一线开发过程当中,绝对没有办法回避,绝对会碰到的一个知识点和工程案例经验的分享,那就是和MYSQ的缓存双写一致性问题,这个知识点是决定你能不能进阶高阶程序员的面试的必备。案例和对应的训练。因为你在日常工作中使用red的时候绝对会碰上这些坑,那么面试官在问你的时候,就要看看你们公司或者说你本人,做为一个一线开发人员,你对red所使用所掌握的了解的深度和广度,以决定对你的定岗定心。这章非常重要,两张合二为一,分为上部分更新策略,下部分落地案例理论实操小总结,请同学们务必把两张整体听完以后,认真的做好笔记并写进简历里面。好。那么同学们先来看何为缓存双写一致性问题,我们呢,老规矩。
01:13
面试题说话来吧,先来看看这个,那么在使用基于spring和spring cloud的分布式微负开发的过程当中,实际案例我们之前都做过,都写过了啊,那么大家都明白一般呢是三步,第一个Java程序。先来我们的倒层啊,当然现在的DAO倒层有red加MYSQL2个整体构成。前面说过red的作用相当于MYSQ的带刀护卫,挡在前面对吧,减轻MYSQ的压力,那么第一种情况最顺利,最OK,最简单Java。来查询red里面有直接就返回,所以说第一种绿色的OK,直接从red返回,并获得第二种。
02:00
Red,没有,那么red没有继续往前推进,去MYSQL查询,他会把MYSQL查询到的数据返回给我们的。Java程序,此外还有第三个导购次需要把本次从MYSQL查询出来的数据回写进我们的RA,保证了两边的数据一致,这个就是我们的缓存双写一致性问题。OK,好,再次强调,我们这加个限定条件,默认马斯克有数据啊,当然如果马斯克也没有什么缓存穿透啊,缓存学崩啊,缓存绝机窗啊等等,那个呢,我们后面那些章节再介绍啊,这默认马斯克有数据,其他的我们先暂不讨论,现在给我拉回来就说一件事。你如何保证两边数据有,也即缓存right和关系性数据库MYSQL,他们数据的数量和匹配度尽量是接近完整的,你不能说MYSQL有100条,RA只有90条,那么两边不一致,这是不OK的。那么这个就是我们缓存双写一致性问题相关的前提条件和业务要求。那么接下来面试官就会问问你,在这个查询过程当中,你会有哪些坑,踩过哪些坑?
03:19
碰到过哪些异常情况来决定你的工程经验案例的深浅,那么下面我的问题上面我相信一听。就懂业务不复杂,无非就是先去查,查得到了返回,查不到了再去MYSQL查。本次我们默认MYSQL有数值,那么从MYSQL返回,然后MYSQL再回旋上面的业务逻辑,你用Java代码,你准备怎么写?我相信你说啊,杨哥简单,那么下面呢,我们先留着,到时候看看你考虑的和杨哥要求的是不是一样好。业务和我们的问题就一个缓存双写一致性,那么本章就决这么一个问题,其他不说,那么来吧,看看面试题有哪一些。
04:05
面试官,这些都是杨哥培养的学生,他们有工作经验,跳槽去大厂问过的电话面试录音大家了一眼,你只要用red缓存啊,就可能涉及到red缓存和数据库的双写,双存储和双写,你只要双写就一定会有数据一致性问题,那么请问你们公司一般怎么解决这个一致性问题,你要谈谈,大家请看,就听你说这种题就是什么?没有标准答案,不是我会来问你哈希赛特底层的数据结构是什么,可以背下来。下面这种问题就是主观题,现在考的非常灵活,就是考你的工程案例经验。第二个双写一致性,请问你是先动缓存ready还是先动MYSQ数据库,你先碰哪一个?为什么那么也记啊,它的意思就是这样的。哥哥,你是先更新red,再更新MYSQL,第二种先更新MYQL,再更新red,第三种先删除red,再更新买色条,第四种先删除买色条,再更新red等等等等各种排列组合,请问你们公司用的是哪一种?你为什么要这么用好?第三个问题延石双山你做过吗?
05:24
如果要用延时双山,你会碰到哪些问题?第四一个有这么一种情况,这是面试官当场在电话远程面试以后的局对策略,他微护查询red没有数据,也许现在red本身就没有,也许中的key它已经过期,突然消失了,就是里面没有数据,MY有啊。面试官举了一种具体的细节案例,为了保证数据双写一致性,我们会回写register,那么请问你在回写的时候你需要注意什么?你谈谈,然后他会给你个提示,双减加锁,这个策略你了解过吗?那么请问你写代码的时候如何尽量避免缓存击穿啊?至于说缓存击穿,我们后面聊,我们先听一说来RA和MYSQL双写的话,100%会出纰漏,因为在基于分布式微服务架构下面,绝对不可能做到绝对的100%的强一致性,那么请问你如何保证最终一致性?
06:21
各位亲,试试你的答案,聊聊这些问题。
我来说两句