00:00
好,那下面呢,我们来看咱们的笔记,大家注意,那我们的一级缓存呢,它也有失效的时候,也就是说我们当前咱们通过同一个circle session,然后去查询相同的数据,然后他有的时候也不会从咱们的缓存里面去获取,它也要重新去查询数据库,那这个时候,那什么时候才会使一级缓存失效呢?大家看啊,一共有这四种情况,好。大家看来这个使啊一级缓存失效的四种情况啊,四种情况情况好,大家来看,首先第一种啊,然后第一个情况是什么?然后叫做不同的circle session对应不同的一级缓存,这就不说了啊,因为circle session一级缓存就是circle session级别的,我们在这呢已经给大家演示过了,你看我们上面咱们获取的是一个circle session,下面咱们获取的是不是也是一个新的circle session,那所以说当我们在第二个circle session里面来查询一个相同的数据,它是不是会从数据库里面重新去查,为啥?大家想想这个问题很简单,因为你在他之前咱们的这个circle session里面是没有缓存数据的,你没有去查过,那所以咱们第一次查那缓存中没有,那我们肯定是要从数据库里面去查询的呀,对不对,这样的啊,好再往下大家来看同一个circle session,但是查询条件不同,那这就不说了,为啥。
01:26
你大家想一样的道理,你在这查询的是一,在这儿查询的是二,你要想从缓存里面去获取,那缓存里面得有啊,大家说是不是你在这儿查询了一个一,然后咱们缓存的是不是应该是ID为一的员工信息,结果你查询的是二,那缓存里面有ID为二的员工信息吗?是没有的,所以说这个时候大家注意它也是会是一级缓存失效的,当然呢,这个其实主要说的是一些条件问题啊好,再往下大家看同一个circle session,两次查询之间执行了任何一次增删改操作,诶大家想想这又是啥意思,叫做次查询之间执行了任意一次增删改。
02:09
什么意思呢?嗯,大家想想,也就是说我们现在比如说我把下面咱们的这疙瘩给它注释掉,我们现在咱们就只有我们通过同一个circle session,然后来查询的两次员工ID为一的这个员工信息,如果我们在这儿啊,然后来执行了任意一次增删改,大家注意啊,然后你的一级缓存就会失效,为什么?什么叫一级缓存失效?先说一下啊,就是说我们当前呢,在这执行的任意一次增删改之后,你再次查询ID为一的员工信息,它是会从数据库里面来查询,而不会从缓存里面来获取的,为什么?很简单,因为你任意一次增删改是会清空缓存的。为什么?大家想想,因为增删改会改变咱们数据库中的数据,对吧,那是不是很有可能我们的增删改就会将我们就会去影响我们当前去缓存的这个数据,对吧?那所以大家想你查询数据要查询的是数据库里面真实的数据对不对?那所以大家,那所以大家说我们现在执行了任意一次增删改之后,如果它影响到了我们当前缓存的这个数据,那我们当前再次从缓存里面去获取的这个数据有意义吗?没有任何意义。
03:25
因为你,因为你查询数据,就是要来查询数据库里面真实存在的,真实有意义的这个数据的,对吧,但是你的增删改呢,是不是就会影响这个数据,因为它增删改,它最终是不是都会更新咱们数据库里面的一些数据啊,对不对这样的啊,所以说呢,大家注意第三个咱们使一级缓存失效的情况,就是两次查询之间执行任何一次增删改,其实这个问题啊。很容易理解啊,好比如说呀,你看我们现在咱们在数据库里面,然后咱们缓存的是不是应该是这样的一条数据,那如果我现在我中间执行了一个删除,我把这个数据给它干掉了,那大家说你现在你还从缓存里面去获取了,你还从缓存里面去获取,那现在还有ID唯一的员工信息吗?那没有,真实的情况是没有这条数据了,那如果你还从缓存里面去获取的话,那咱们获取的这个数据,大家说你有意义吗?
04:23
啊,大家想一下有意义没有,没有任何意义吗?对不对,所以说不管是删除还是添加还是修改,它都是会将咱们当前的缓存清空的,当然不止一级缓存,二级缓存也会清空,这个咱们一会再说,那下面呢,我们在这就写一下呗,比如说大家看好,我在这呢,来写一个添加的操作,叫做insert emp OK,好,然后这里面咱们传进来一个emp对象,然后大家看啊,这个叫做添加员工信息,员工信息。然后呢,咱们复制一下,放到我们当前的映射文件中,大家来看啊,好,然后注释好,然后是insert标签,然后ID要跟方法名一致,然后下面呢是insert银拓表名T_emp t下划EP,然后values,这里面的数据比较多啊,或者说咱们。
05:22
写全了吧,行吧,第一个是na,第二个是井号大括号emp啊emp内,然后再往下井号大括号,然后是A,然后再往下是金的,然后最后一个呢,是第一批did,咱们也给它设置为慢就可以啊好,那我们在这个地方咱们来调用一下,然后叫做map1.insertemp,然后new一个emp对象,然后这是nine,然后这呢咱们写个叫小红。好,然后年龄。25,然后性别男,OK,行,就这样就可以啊,大家看好,我们现在咱们再来一次执行,大家看啊,虽然说我们现在查询的数据它都是一对吧,但是最终咱们执行的SQ去执行了几个三个看好啊,这是第一个查询,这是第二个添加,然后这是咱们的第三个又次又再一次来进行了查询,所以说大家一定要看好,任意的增删改它都会使我们当前的一级缓存失效,你哪怕你更新的不是这个数据,那咱们也不知道它有没有影响啊,所以说任何的增删改都会将咱们的一级缓存清空,OK吧,这样的啊,好,那我们把这个给它注释掉,然后下面大家再来看咱们的第四种情况,第四种情况就是同一个circle session两次查询期间手动清空的缓存,那这就更好理解了,咱们刚才呢,咱们执行任意一次增删改的时候,它是自动清空的。
06:58
而我们现在呢,咱们是可以通过我们的代码,然后进行一个手动清空的,比如说通过谁清空,大家想想。
07:07
啊。那我们现在通过谁清空你一级缓存什么级别啊,Circle session级别吗?那所以说你要清空缓存,那我们当前那不就是拿着咱们的circle session来清空嘛,对不对,大家看这里面有个叫什么catch。看好啊,就这个方法,这个方法就是来清空一级缓存的,一级缓存是circle session级别,那你要把circle session的缓存给清空,那我们所调用的对象肯定是circle session的,对不对?好,下边我们在这再来一个执行,大家看啊,这个时候我们当前执行的circle语句也是两个对吧?第一个来查询,第二个然后又一次来查询,能看懂吧?好,所以说这是我们当前是一级缓存失效的四种情况,好啊,当然呢,这个前两个的话其实很简单对吧?啊,前两个很好理解啊,关键是后两个大家一定要注意,然后呢,任何的增删改都可以使一级缓存失效,然后因为它会在我们执行完增删改之后,然后自动的来实现清空缓存的操作,然后第四个的话,那就不一样了,我们是可以手动的来清空缓存的,OK吧,好,这些都可以使一级缓存失效啊。
我来说两句