00:00
好,然后下面呢,我们来看一下二级缓存的一些配置啊,然后就是在我们的映射文件里面对吧?然后我们在开启标签里面所设置的一些属性,也就是说咱们先来看第一个啊,当然这些属性的话,大家就是先简单了解一下就行啊,因为他们都有默认池,所以说我们也不需要去配置啊,首先大家先来看第一个啊,叫avi什么意思,叫做缓存回收策略啊,那为什么咱们要来回收缓存呢?大家注意,因为缓存其实就是把咱们的数据啊保存到我们的内存中,然后呢,当我们的缓存里面有这条数据,那我们就可以直接从内存里面来获取了,知道吧,好,然后所以说大家想想,内存里面你能无限制的去存储数据吗?不能,所以说我们就需要来设置一个缓存回收策略,根据咱们指定的策略来对缓存进行一个回收,它默认的是LRU,什么叫LRU,叫最近最少使用原则什么意思?将我们当前最近这一段时间之内使用的最少的这个数据啊,然后将它给移除掉,也就是咱们这里面所说的移除最长时间不被使用的对象,OK吧,这个还是很合理的啊。再往下fio什么意思,叫做先进先出什么意思呀?大家想想,那我们在缓存的时候,咱们缓存的数据是不是会有顺序,我查ID为一的,那咱们就先存ID为一的,我查ID为二的,那咱们就再存I。
01:30
为二的好,这个时候咱们就可以按照咱们对象存入存到缓存里面的顺序来把它给移除掉,好OK,再往下还有soft,还有weak,这个是跟我们的垃圾回收机制有关的,大家了解一下就行啊好再往下大家来看第二个属性叫做flash inter,什么意思叫做刷新间隔,什么叫做刷新间隔?就是过,就是每过指定时间就把咱们当前的缓存呢来进行刷新,其实就是进行清空,知道吧,然后默认情况,大家注意不设置,什么叫不设置?也就是没有刷新间隔,没有刷新间隔的话,咱们只能通过调用语句来对二级缓存进行刷新。
02:13
诶,那大家想调用什么语句能使二级缓存刷新呢?咱们在上个视频里面是不是就讲了什么情况下才能使二级缓存刷新,是不是在我们当前两次查询之间执行任意一次增删改,然后是不是才会是二级缓存刷新呢?所以说这个大家注意,你要知道这句话是什么意思啊,好,再往下在这有一个size。Size是干什么的?来设置我们当前引用的数目,什么叫引用的数目?就是我们当前这个缓存里面,它最多能够存储多少个对象,大家不要设置太多,因为这个我们一般都。不自己设置用默认的就行,因为你设置的太大。它容易导致内存溢出,你设置的太小,那咱们的缓存又没有什么意义,对不对,所以说在这咱们一般也是不去设置它的啊,然后咱们用默认的就行,好下面呢,大家再来看咱们在这有一个叫做read only属性,什么意思,叫做只读,然后只读指的是我们当前咱们的缓存是只读,或者说是读写缓存,那大家注意,那它们两个有什么区别呢?大家看好了啊,一定要看好这个只读说的是什么?比如说我们现在呢,大家看好了,这个就是我们当前咱们缓存到咱们内存中的这个数据,然后只读缓存来表示的是啥?表示的是会把我们当前的会给调用者返回缓存对象的相同实例,也就是说呀,当我们现在咱们要从缓存里面来获取数据的时候,它会直接将我们当前缓存的这个数据直接给用户返回。所以说这个对那。
03:56
我们当前咱们所咱们所设置的这个缓存,它就是一个只读缓存,为什么?因为你不能修改,为啥?大家想想你缓存的是啥?是我们从数据库里面查询出来的数据,对吧?然后所以大家想想,如果我现在我把这个对象直接交给我们的调用者,然后进行返回,那我们当前调用者在获得这个数据的时候,你能对它进行读,你能进对它进行写的操作吗?你比如说我现在缓存了一个EP对象,对吧?然后我在获取这个EP之后,你能把里面的数据给改了吗?不能,为什么,因为你现在获取的就是咱们缓存的这个对象,那你在这儿把它给改了,那大家说你缓存的这个对象是不是也得是不是也就改了,那所以这个时候大家想想。
04:42
我们当前你再从缓存里面去获取这个数据的时候,它还有意义吗?它跟咱们数据库里面的数据一样吗?它就不一样了,所以说大家看好,当你把它设置为true的时候,我们当前是会把这个对象,咱们缓存的这个真实的对象,然后为用户来返回的,所以说我们是不能来对它进行写的操作的,知道吧,而不能对它进行写的操作,咱们只能来读而不能写啊好,然后这提供了很重要的性能优势,那为什么它的性能比较优?一为什么它有性能优势呢?大家再往下看,你看咱们在这儿呢,有读写缓存,就是当你把这个属性值设置为force的时候,那什么叫读写缓存?每一次我们从缓存里面来获取这个数据,大家注意,它都不会把这个真实的数据给我们返回,而是会将先将这个对象进行拷贝,将它所拷贝出来的对象再然后提供给我们当前的调用者,那所以大家想想,那我现在我在这。
05:42
获取的这个对象是不是它由它拷贝出来的对象,那所以我改它对它有影响吗?没有任何影响,OK吧?哎,行,这个大家注意,所以说它叫读写缓存,好,但是大家想每一次我们从缓存里面获取,你都要拷贝一个新的对象,那所以说它的性能不就稍微低一些吗?是不是,那我们上面这个性能它不就稍微高一些嘛,对不对,但是你要注意,如果你用上面这个,那咱们当前这个对象你是改不了的,你是改不了的,因为你要把它给改了,那我们当前所缓存的这个数据就也被改了,知道吧,这样的啊好,这个是我们当前咱们缓存的一个只读这个大家看好,那下面咱们把这个问题咱们也直接来说一下,上面咱们这个关于这个缓存的一些配置啊,二级缓存的一些配置,大家了解一下就行啊,好,下面呢,我们把这个问题也直接说一下,叫做买杯提子缓存查询的顺序,大家注意啊,大家想想。
06:40
先从哪查,再再往哪查,是先查二级缓存还是先查一级缓存,大家想一下。啊,是从大范围查到小范围,还是小范围查到大范围啊,咱们现在肯定是要从大范围查到小范围的,因为你的circle session factory的级别。它的范围是要比咱们的session的范围要大的,对吧?然后如果我当前我的circle session factory里面有了,那我们是不是就可以不需要不就不需要再去查一级缓存了,对不对,这样的啊,再说了,大家想,既然二级缓存的范围大,那你的二级缓存里面存的数据多,还是一级缓存里面存的数据多呀,那肯定是二级缓存里面存的数据多,因为我们的一个circle session factory可以对应多个circle session,而你的一级缓存对应的就只有一个circle session,对不对,这样的啊,所以说。
07:33
缓存查询的顺序,先查二级,二级缓存中可能会有其他程序已经查出来的数据,也就是说有可能是咱们的其他的circleq session查询出来的数据,那咱们把circleq session关闭之后,那大家说一级缓存中的数据就会保存到二级缓存中,那咱们是不是就可以直接拿来使用了,对不对,这样的啊,好,再往下,如果二级缓存没有命中,那咱们再去查谁一级缓存,如果一级缓存里面大家注意,那有同老师一级缓存里面的数据,二级缓存里面肯定有啊,不一定,为啥,因为咱们说过一级缓存只有在circle session关闭或提交的时候才会把数据保存到二级缓存中,那在他没有关闭或提交的时候,大家说有可能这里面的数据咱们的二级缓存中也没有知道吧,这样的啊,好,那如果一级缓存也没有命中怎么办?那最终咱们只能去查数据库了呀,对不对,这样的啊,OK,这就是我们刚才所说的circle。
08:33
审关闭之后,一级缓存中的数据才会保存到咱们的二级缓存里面,所以大家一定要看好my be缓存查询的顺序,OK吧,好啊。
我来说两句