00:00
好,那我们刚才呢,咱们是把这个MY中的动态circle呢,然后咱们讲了一下。来下面的话,大家来看咱们的第十个问题,叫做my bet的缓存,那my be的缓存首先大家要知道什么是缓存啊,这个缓存呢,就是会把我们当前查询出来的数据呢,然后来进行一个记录,然后等到我们下一次咱们再来查询相同数据的时候,它就会从缓存中去取,就不会再从我们的数据库里面重新去访问了啊。这个大家注意,这是我们的买杯体中的缓存,那其实这个缓存功能咱们还是比较常见的,就比如说咱们的浏览器中是不是也有缓存这个功能,对吧?特别是我们在学习咱们的web的时候,然后呢,有的时候我们在页面中去改的一些内容呢,大家会发现有的时候没有效果,这个时候我们来清空一下缓存的话就可以了,为什么?就是因为我们浏览器会把我们当前一些页面中的内容呢来进行缓存,那这个时候如果我们再去访问,它就不会从我们的服务器中重新去获取了啊好,所以说咱们清空了缓存之后,那缓存中没有了,那它就会直接从我们的这个服务器中重新去访问,那我们的买杯体中的缓存呢,也是相同的效果,它会把我们查询的数据进行缓存,然后这个时候当我们再次去查询的时候,如果缓存中有,那它就会直接从缓存中去取,如果说缓存中没有,它才会从数据库中重新。
01:31
去访问,好,那我们的my be的缓存呢,大家注意它分为一级缓存和二级缓存,一级缓存呢,它是默认开启的,那我们的一级缓存和二级缓存有什么区别呢?大家注意它们的级别不一样,也就是说它们的范围不一样,就比如说咱们的一级缓存,它的范围呢,是circle session级别的,那什么叫circle session级别,大家来想一下,也就是说我们当前通过同一个circle session查询出来的数据会被缓存,然后呢,如果说我们当前再通过相同的circle session再来查询相同数据的时候,然后这个时候它就会直接从缓存中去取,没有的话,那当然就要从数据库重新访问了,这样的啊,那比如说呢,咱们下面就可以来测试一下,大家注意啊,一级缓存是默认开启的啊,比如说我们在这,咱们再来创建一个map接口。
02:28
然后咱们这个map接口,咱们就叫做。啊,叫做catch catch map。OK,好,然后创建完成之后来找到我们当前咱们的映射文件。好,然后咱们要来保证命名空间跟我们map接口的全类名一致,然后map.map点点,然后catch map OK,啊行,那我们随便来写一个功能,那大家说缓存应该是针对于什么功能的啊,针对于增删改还是查呢?是不是应该只针对于查询功能对不对?大家要注意啊,缓存只对咱们的查询功能有效,好,那所以说咱们在这来返回一个emp对象,叫做get EP,然后by e ID括号,那咱们在这是不是就可以直接传进来一个ED来查询我们当前的数据了,来加上一个a per,叫做eid。
03:27
行,复制一下,然后来找到我们当前的映射文件,咱们把这个circleq去写一下就行啊,首先呢,Select标签,然后ID要跟方法名一致,Result type就行啊,行,然后select share from t_EP,然后well e ID等于井号大括号EID,好啊,那我们来创建一个测试类,来大家看啊,来创建一个class,咱们叫做she catch map。
04:00
Test好来加上一个unit测试方法,然后VO的返回值叫做test get e,或者说咱们就test catch好来测试缓存功能。首先咱们第一步要来获取我们当前的circle session对吧?然后再通过circle session来获取我们当前的map。对象,然后这里面咱们来创建的应该是catch map.class来创建catch map的对象啊好,来调用我们的这个方法,比如说我们在这来查询一个E为一对不对,然后它的返回值应该是EP对象,然后咱们直接来输出,大家来看啊好,现在我们来一个执行。好,大家看一下,那我们现在是不是把这个数据给查出来了,对,那咱们什么叫做缓存呢?比如说我现在我再通过我们当前咱们的同一个map,然后咱们再来查询一个相同的数据,比如说我们当前查询的还是EID为一的数据,那这个时候我们来观察一下它所输出的circle,因为大家都知道我们输出这个circle了,那说明这个circle执行了,那我们现在呢,咱们再来查询一条相同的数据,咱们来看一下它还会不会来输出这个SQ语句啊行,大家来看,然后在这儿的话,这个咱们叫EP1,这叫EP2。
05:26
好来,我们现在来一个执行,大家来看一下啊。好,大家会发现只输出了几个circle,是不是只输出了一个啊,那这说明什么?这说明我们当前。来调用我们的这个方法,第二次的时候,然后咱们重新来查询我们当前EID为一的这条数据的时候,有没有去执行S狗啊,没有,那它到底是从哪来获取的这个数据呢?大家注意非常简单,它就是从我们的缓存中来获取这个数据的,所以说我们当前咱们的my be的一级缓存,大家注意咱们没有做任何操作,对吧?我们之前咱们是没有做任何关于缓存的操作的,所以说一级缓存它是默认开启的,OK吧,一级缓存大家注意它是默认开启的啊,那一级缓存的级别是什么呢?一级缓存的级别是我们的circle session级别的,也就是说通过同一个circle session,哪怕我们现在用的不是同一个map对象,我们同样也能够从缓存中来获取数据,从一级缓存中获取数据,这个大家看,当然呢,其实它跟咱们的map对象呢,也没有什么关系,对不对,好比如说大家看好,我们来测试一下啊。
06:41
然后我们在这咱们来获取咱们的map的时候,这是咱们的MAP1 map1,然后下面我通过circle session.get map,然后咱们再来获取一个咱们的map对象。来大家来看一下获取咱们当前的这个map对象,比如说这个map咱们叫做MAP2,我们在这儿来查询的时候,咱们也是通过MAP2来查的,对不对,但是大家会发现咱们的这两个map对象都是通过同一个circle session来获取的,对不对?所以说我们现在咱们再来一个执行,大家会发现,哎,咱们的circle区输出的是不是还是只有一个呀,对不对?所以说我们当前咱们能够发现在同一个circle session,咱们所获所查询出来的数据是会被缓存的,当我们再一次来获取相同的数据,是可以从缓存中直接来获取的啊。
07:35
好,那比如说我现在我的circle session,然后呢,大家看好了啊,这呢是咱们的circle session1,然后我下面我再来获取circle session的时候,我重新获取一个新的叫做circle session get circle session。对吧,然后这个咱们叫做circle session2,那我们下面第二次来查询的时候,咱们通过circle session2,然后来进行查询,那这个时候我们再来一次执行,大家来看一下啊,看它还会不会从缓存里面去取呢,大家看SQ语句输出了几个两个,那所以说足以证明我们的一级缓存,它的范围就是circle session OK吧,这个大家注意啊,行,那这是我们的my be的一级缓存,大家需要注意的问题是它的范围还有呢。
08:25
就是我们当前咱们的缓存的一个功能,其实就是将我们所查询出来的数据先进行保存,等到我们在指定的范围中,咱们再次来查询相同数据的时候,它就可以直接从缓存里面去取,OK吧,好啊。
我来说两句