好,欢迎大家来到鲨鱼微课的炸网教程啊,鲨鱼微课每天五分钟,学渣吧小伙伴们点点关注啊,非常感谢大家的支持啊。那这讲我们继续讲这个买贝克斯框架啊。啊,我们这讲来讲这个买贝克斯框架的缓存机制 啊,我们知道买备胎框架是一个操作数据库的框架吗?啊,然后对于数据库的操作来说啊,有很大一部分都是查询操作,那么如果来提啊,提高这个查询的效率呢,就是用的缓存是吧? 哦,那这缓存机制呢,有两种,一种是这个一级缓存啊,一级缓存呢,就是我们就是连接一次数据库,就是开启了一个赛事,对吧?他一级缓存呢,就是赛事级别的,就是对于你自己而言啊,你执行执行两次相同的涩口啊,他就会啊,就 是就是因为你两次三个都相同,那么我第二次就没必要再去做数据库了,对吧?相当于存在缓存力,第二次给你直接用,这样效率肯定肯定是会更高一些嘛,对吧?啊,那么贝特斯默认是开启这个一级缓存的,也就是你在你在,但这个前提是你是 同一个四口三声啊啊,所以说这个如果是缓存失效的时间就是,呃,这个四口三声关闭了,当你关闭了,你再开启三声的话,就不属于同一个三声了,这个一级缓存就失效了,对吧?还有一种情况是你这个发生了增伤感的操作,这个 啊也会失效啊,就是因为我们执行两次一样的查询的 super 肯定要查询一样的结果,对吧?如果你是就是做了这增伤感的话,这缓存就失效了,对吧?啊?以后我们用 retice 做缓存也是这样的,就是你更新数据库的话肯定要去更新缓存的,对吧?啊?这是一个一级缓存啊,那比他更高级别的缓存呢?是二级缓存啊,之所以他说他说他级别更高呢,其实就说的是 啊,他的范围更广,也也就是因为上面这个是一个赛神级别的啊,那就是你自己自己开启的一个赛神,对吧?啊?二级缓存,那就是多个赛神共享的,就比如说, 呃,张三开启了一个,李四开启了一个,那是他俩是可以共享的,但是他俩的作用欲的范围是一个麦普,就是这个麦普的内部 space。 什么概念呢?就是我们以前的这个啊,比如说是我们以前的这个 啊,有,有的麦克是吧?有的麦克其实他就是,他就是一个你开启的级别就是他啊, 对应的一个是一个那个 xm l 文文件吗?对吧?他其实就是共享的他一个。那你张三开启一个赛事来操作,李四开启一个宅子赛事来操作啊,你俩是可以共享这个查询借口的啊? 啊?他的底层原理呢?其实就是一个开始的一个时间类啊,这时间类是一个这个路口开始,他是一个哈西迈步的结构啊,这样的,他执行过程是这样的,是 先经过二级缓存先去查询,然后二级缓存没有命中才会走一级缓存,但是前提是你开启了二级缓存啊,因为我们知道这刚才我们也讲了,这个你默认开启的是一级缓存 啊,二级缓存的话需要你手动进行开启,这是是这样的,呃,就是,但是我们也不是什么 什么情况都可以开启这个二级缓存啊,二级喊二级缓存的开启的时期,其实有一个前提,就是你必须保证所有的增山改查都在同一个命中空间下进行了 什么什么意思呢?就是比如说你操作一张表或什么的,你都得都得在这个 u 在麦克底下写啊。如果比如说是你 你想操作一张表,但是你写了两个麦克,那么就是一个在查,一个在改,这种情况下就就无法实际无法供应这个缓存啊,大家注意一下这个问题啊 啊,如果说你没有这个问题可以正常开启二级缓存的话啊,那么开启二级缓存的步骤是什么呢?其实也比较简单啊,我们在这个对应的这个这个叉叉门里面加一段这个这个配置啊,就是就是你加一个开始啊,对应的 他是先进先出一个对列啊,然后刷新时间,然后一个大小,比如说比如说是五百二,五百一十二照的吧啊,这个你可以自己配啊,然后属性是指头的,这其实这就配置好了啊,这配置好了,然后接下来的话我们再做一个事情,就是 啊,就是你这这里注意啊,就比如说某某一条 surp 啊,他是默默认是这个缓存是开启的啊,如果你不想用这个缓存的话,你就把这个就是开支成 boss 就好了啊。然后另外的话注意一点是这个你对应这个实体类里边要实现这个序列化的,序列化的接口啊 啊,这几步做完了,其实我们就我们就把这个事情做完了啊。呃,就目前的话,我们这个方法,目前的话我们这个话题是关闭的,对吧?然后我们 一下这个测试类啊,测试方法你们看一下,嗯,就是现在什么是因为我们手动给他制成这个方法制成了不开机缓存吗?然后我们运行一下啊, 因为因为你是就是没有开启缓存,所以说肯定要查查两次数据库,对吧?这是我们期待的情况。嗯,我们等他启动一下看一下啊。 嗯,他执行完了我看一下啊。嗯,这是第一次执行,对吧?第一次执行你看打印了一个色号,查出来八条数据,对吧? 啊?接下来的话第二次执行他又执行了一次三号,又查出了八条数据,对吧?这是没有开启划船的情况下啊。那我们把我们把这个手动的置为处,或者说你你默认他默认是处啊,处的时候你可以不写,其实 啊或我们我们就,我们就就不写了啊,不写他就是开启的啊。那我们再执行一下刚刚这个测试方法,我会加大家想要这个测试里边这个方法在模拟的情况啊。首先的话你开启了一个赛神,对吧?你就这直接手动开启了一个赛神 啊,然后这块有个手动右手动开启一个赛神赛神二,相当于两个用户操作一个,对吧?这个就是啊,必须就是他,你必须开启二级缓存才会运动啊,一级缓不会运动,一级缓存的,这这种情况啊,然后我们预选一下啊, 我们再看一下,如果说他是第二次不读书就哭,证明我们这个二期缓存就生效了,对吧?嗯,这样的情况下肯定就能提高查询效率嘛,因为第二次 这就不走数据库了,对吧?嗯,我们看一下这个效果啊,你看第一次的话他打印的色库,对吧? 那第二次没有打印色号,并且的话他他说这里已经命中了缓存,对吧?其实这个就是这个买贝的 s 二就缓存了,如果你符合这种开启买贝的四二就缓存的情况啊,就是这这种情况啊, 这种情况,然后你就可以就可以开启这个二级环节,这样的话就会提提高你的财运效率啊。啊,那其实这讲的主要内容讲完了,小伙伴们记得点点关注啊。下一讲我们去讲一讲这个买威克斯的印象工程,就是这个印象工程自动生成代码是怎么生成的。那这一讲就讲到这里吧,感谢大家。
粉丝518获赞2111

一位工作五年的小伙伴去模拟面试,并问到一个 my bates 的问题,当时问的是何时使用一级缓存,何时使用二级缓存,那么去之前呢,他还特地复习了一下 my bates 的相关知识,想到自己用 my bates 用的比较熟练了, 在这个问题上翻车了,那今天呢,我给大家来分享一下 mabids 的缓存机制。另外呢,我花了一个多星期准备了一份十万字的面试题解析拍照文档,想获取的小伙伴可以在我的个人主页简介中找到。 my bids 里面呢设计了两级缓存来提升数据的检索效率,这样的话就避免了每次数据的访问都要去查询数据库。先来看一级缓存, 它是 secrecy 级别的一个缓存,也叫本地缓存,因为每个用户呢,在仔细查询的时候呢,需要使用 secrecy 的执行。那么为了避免每一次都去查数据库, my batis 呢就会把查询出来的数据呢保存到一个叫做 c 和 c 型的一个本地缓存中,那么后续的 c 口语句再执行的话,如果命中了缓存,就可以直接从本店缓存中去读取数据。那如果要实现跨 c 和 c 型级别的一个缓存,那么一级缓存就无法实现了。因此呢,我们 my basis 呢就引入了二级缓存。 那么当我们有多个用户在查询数据的时候,只要有任何一个 cq 申请拿到了数据,就会放入到二键缓存里面,其他的 cq 申请呢,就可以从二键缓存去驾驶数据。 那么接下来呢,我给大家来详细分析一下 my bids 缓存机制的实现原理。先来看一级缓存的实现原理,那在 civic 里面呢,有一个叫做 execute 的一个对象,那么每个 execute 中呢,都会有一个 local cat 的一个对象,当用户发起查询的时候, my bids 呢,就会根据执行语句 在 logo cat 里面去查询,然后如果没有命中的话,就会再去查询数据库,并且呢写入到 logo cat 里面,否则的话就直接返回。所以呢,一级环境的生命周期呢,只在 c 个 c 型这边,哎,多个 c 个 c 型或者是分布式环境下,就可能会导致数据库的写操作出现张数据, 那么这个时候呢,就要用到二级缓存下面呢,来看二级缓存的具体时间原点。二级缓存中呢,使用了一个叫做开启 xq 的这个对象,他是对 exq 的进行了一个封装,也就是用的装饰机模式。在进入一级缓存的数据查询流程之前呢,会先通过开启 exq 的进行二级缓存的查询, 开启二级缓存之后呢,会被多个这个申请共享,所以呢,他是一个全局缓存,因此呢,他的查询流程是先查二级缓存,然后再查一级缓存,最后再查数据。 另外呢, my benice 的二级缓存呢,相对一级缓存来说,实现了一个 c 和 c 型之间的一个缓存数据共享,同时呢,缓存力度呢,也能够控制在 nine space 级别,并且呢还可以通过开启结果来实现类的不同组合,对开启的可控性呢也更强了。 以上呢,就是我对麦贝利斯缓存机制的理解,那么在实际业务场景中呢,多级缓存的设计思想呢,是非常值得我们学习和借鉴的, 我们学习底层技术的目的呢,是为了能够提高技术的思维能力和积累解决方案,这样的话我们才能够去胜任更高岗位的一个要求。我是被编程耽误的王一汤,如果我的分享对你有帮助,请你动动手指,一键三连分享给更多的人,关注我,面试不再难!


一个工作了五年的程序员在私信里面不断的向我诉苦,他说啊,他用了麦贝的斯这么久,怎么的也算是精通麦贝的事了吧,结果竟然在麦贝的斯这样一个面试题上翻车了,真的好烦。好吧,那么我们今天看看麦贝的斯里面的缓存机制,普通人和高手的回答。普通人, 嗯。呃。买奔驰的缓存机,是啊,买奔驰的缓存机是,就是,嗯,它有两两级缓存嘛,一级是,呃, c c 型级别的, 就是因为啊, suc 型,它是属于单个绘画嘛,那么意味着就是如果我们的每一个用户的查询是在多个绘画里面的话,那么它就无法,嗯,也就说一级缓存啊,它是它是单个用户绘画里面的,那如果说我要跨多个绘画 的话呢?呃,他没有办法去实现,所以在卖冰丝面还有个二级缓存,二级缓存就是,呃,就是跨跨是一个 c 线里面的一个缓存啊,然后他能够就是 针对多个这种这个车型来去实现这个,嗯,这个,这个就是数据的一个一个缓存吧。嗯, 高手的回答。这个问题啊,有点复杂,我打算从几个方面来去说明一下。首先呢, mi bads 里面设计了二级缓存这样一个机制来提升数据的一个解锁效率, 也就是说避免每一次数据的结束呢,都去查询数据库。一级缓存是 c 个 c 型级别的一个缓存,也叫本地缓存,因为每一个用户在执行查询的时候都需要使用 c 个 c 型来执行,为了避免每一次都去查询数据库,买别的车呢,把查询出来的数据呢缓存到 c 个 c 型的本地缓存里面,后续的 c 口如果在命中缓存的情况下,就可 直接从本地缓存去读取这样一个数据,如果想要去实现跨 c 个 c 型级别的一个缓存,那么一级缓存是无法做到的。因此啊,在麦贝斯里面引入了二级缓存的一个设计,也就是说,当多个用户在查询数据的时候,只要有任何一个 c 个 c 型拿到了数据 放入到二级缓存里面,那么其他的这个 c 选呢,就可以直接从二级缓存里面去加载数据。下面我再来解释一下一二级缓存的一个实现原理啊。首先我们看一级缓存在这个 c 选里面呢,会持有一个 execute, 每一个 execute 里面呢,会有个叫 local case 的一个对象, 当用户发起查询的时候呢,买杯的时候会去根据执行语句在 logo case 里面去查找,如果命重了,就直接把这个数据返回,如果没有命重,再去数据库里面去查询出来,再写入到 logo case 里面。所以啊,一级缓存的生命周期是一个车型,需要注意的一点是,在多个是一个车型或者分公司环境下 呢,可能会因为一级缓存导致一个这样的脏毒的一个问题。而二级缓存的实现原理呢,是在原来的 execute 上去做了一个装饰,一路叫 k 区 execute 的这样一个装饰器,所以在进入一级缓存的查询之前呢,会先通过 k 区 execute 进行二级缓存的查询, 开启二级缓存之后呢,会被多个是一个筛选的共享,所以他是一个全局的缓存,所以他的查询流程呢,就变成了先查二级缓存,再来查一级缓存,然后再去查数据库。 另外啊,卖贝利斯的二级缓存相对一级缓存来说呢,它实现了 c 跟 c 形之间的缓存数据的一个共享, 同时呢,缓存力度也能够控制到 name space 的一个级别,并且还可以通过 k 曲这样一个接口来实现不同缓存实现的一个组合,对 k 曲的可控性也更高了。以上呢,就是我对这个问题的理解。在实际的业务场景中, 多级缓冲的设计思想啊,是非常值得我们学习和借鉴的。所以呢,我认为这是一个非常不错的面试题, 大家牢记啊,学习底层技术的目的是为了提高技术思维能力和积累解决方案,为以后更高的职位做好铺垫。好的,本期的普通人 vs 高手的面试系列视频呢,就到这结束了,有任何不懂的技术面试题,欢迎在评论区给我留言。另外, 三月份的面试文档已经整理好了,需要的可以在主页上加我微来领取。我是麦克,一个工作了十四年的加我程序员,咱们下期再见。

mibadis 面试题 mibadis 的一级二级缓存你清楚吗? hello, 大家好,我是架构师奶爸。 mibadis 中有一级缓存和二级缓存,默认情况下,一级缓存是开启的,而且是不能关闭的。 一级缓存是指 s q l session 级别的缓存。当在同一个 s q l session 中进行相同的 s q l 语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取。 一级缓存最多缓存一千零二十四条。 s q l 二级缓存是指可以跨 s q l session 的缓存,是 mapper 级别的缓存。对于 mapper 级别的缓存,不同的 skession 是可以共享的。上图为 mibadis 缓存机制图,我们下面分别分析一下各级缓存的 原理。 one mibadis 的一级缓存原理 sketchin 级别第一次发出一个查询 s q l s q l, 查询结果写入 skession 的一级缓存中。缓存使用的数据结构是一个 map 的数据结构,格式如下 p 的格式为 m a p p e r i d 加 o f f s e t 加 l i m i t 加 s q l 加所有的入餐 value, 存储的为用户信息。 同一个 sketchin 再次发出相同的 s q l, 就从缓存中取出数据。如果两次中间出现 canmake, 操作修改添加删除。本 sketchin 中的一级缓存区域全部清空, 下次再去缓存中查询不到,所以要从数据库查询,从数据库查询到再写入缓存。二、二级缓存原理 map 耳机 基本二级缓存的范围是 mapper 级别, mapper 同一个命名空间, mapper 以命名空间为单位创建缓存数据结构,结构是 map。 mibadis 的二级缓存,是通过 cash executor 实现的。 cash executor 其实是 executor 的代理对象。所有的查询操作在 cash executor 中都会先匹配缓存中是否存在,不存在则查询数据库。 d 的格式为 m a p p e r i d 加 o f f s e t 加 l i m i t 加 s q l 加。所有的入餐二级缓存配置实现的思路如下 一、 mibadis 全局配置中启用二级缓存配置。二、在对应的 mapper x、 m、 l 中配置 cash 节点三、在对应的 select 查询节点中添加 use cashetry。 以上就是本期分享的知识点,想学习更多 java 编程知识,请关注我架构师奶爸,共同筑基 java 架构师。
