00:00
好,我们来说一下二级缓存的使用。使用步骤。要使用我们二级缓存也很简单,第一个,首先咱们这个开启全局。二级缓存配置。比如说呢,这个全局二级缓存配置,我们得先。而这个配置呢,我们可以在马贝蒂斯官方文档中找到啊,Comp,我们这个配置配置这有每一个设置项,其中就有catch给的,哎,它就是开启全局二级缓存,你看啊,人家默认是不是也是开启的,但是还是遵循我们那个原则啊。我们只要确认开启的信息,我们都来要显示的配置出来。哎,显示。是这个事啊,我们显示的把它配置出来,哎,防止我们版本更替的时候,这个属性又被哎改变了好。这个呢,我们第一步先开启全局二级缓存的这个配置。
01:03
接下来第二步。因为它是二级缓存是name space级别的,所以说呢,我们应该,哎,我们去。每个map中去map啊,点map中咱们这个配置,配置使用二级缓存。那么怎么配置呢?我们就来到这个map,好,这个配置呢,非常简单,我们只需要在这里边al写个一个catch标签就行了。这样的话呢,它就配置了这个二级缓存。他就使用二级缓存。但是这个二级缓存呢,也有一些默认的策略。比如。哎,比如我们来看这个。In,那么呢?说一下。还有其他的策略我们都来,哎说出来什么flash,哎,这个read on,以及咱们这个size,哎,咱们这个type。
02:09
好,我们来说一下这些属性的这个意思。那么呢,它的意思就是缓存的。回收策略。这个回收策略呢,也就是说我们这个缓存里边的内容啊,超了以后,那把哪些给它删除掉,这个回收策略呢,我们在官方,哎,我们这个PPT里边有好多,我就直接拿过来。我就。哎,这个呢,大家看一下。哎,比如什么LRU最近最少使用,呃,先进先出,软引用弱引用等等这些策略,默认呢,就是LRU,我你想用,哎fio也可以,所以说呢,这是缓存回收策略。还有这个flash interval。
03:01
它呢,是咱们这缓存刷新间隔。哎,这个间隔呢,也就说缓存多少,缓存咱们这个多长。多长咱们这个时间。清空一次。咱们这个默认呢,默认是不起控。哎,不清空。大家呢,可以在这里边啊,设置设置一个咱们这毫秒值,它是以毫秒为单位的啊。说呢,他让他多长时间清空一次,比如呢,我们让他。6000,哎,这是六秒。这是60毫秒,哎,这是60啊60秒,这是60秒一分钟,我们让他一分钟清空一次。好。再比如呢,我们这个read啊,就是缓存啊,是否只读。
04:05
这个只读呢,如果是处,哎意思呢,就是只读。Force就是非只读。这两个呢,有什么区别呢?只读的意思就是说,哎,我们这个啊,马贝蒂斯认为,贝蒂斯认为啊,所有从。缓存中获取数据的操作都是操作的。啊,不会修改数据。那么呢,马蒂斯就直接会将马蒂斯。为了加快。加快咱们这个获取速度。哎,直接。就会咱们这个将啊,我们这个数据在缓存中的引用。引用。
05:00
交给咱们,交给咱们这个用户。所以说这样的话呢,引用都交给用户了,用户一旦把这个引用的值变了,缓存里边的内容也会改变,这种呢可能不安全,但是速度快。而我们这个非指读呢,哎也就是说马贝蒂斯就认为哎你这些操作,哎不可能马贝蒂斯哎觉得哎操作获取来的数据,获取的数据可能会被修改。这样的话,我就不能直接给你教引用了,马贝利就会利用反序列化,以及马贝斯会利用咱们这个序列化与反序列化的技术给你克隆一个数据。啊,与咱们这个反序列化的咱们这个技术。克隆。啊,一份新的数据。给。
06:00
比如说呢,这就是两种模式,那么呢,啊默认呢,人家就是这个非制毒的啊,他呢安全。但是呢,有这个反序列化过程速度呢啊,稍微慢一点。默认人家是force。还有这个size啊表示呢,咱们这个缓存里边。缓存。存放。多少元素?哎,多少个元素啊,比如说呢,比如我让你缓存中我只保存1024个元素,那么type呢?啊,就是我们这个,这个是我们自定义缓存的时候。指定我们自定义的这个。缓存全类名。而我们用的是默认的指定自定义缓存的全类名用的是默认的,那呢我们就不用管了,哎,如果想要自定义MY也提供了诶这个catch接口。
07:01
这个看接口,大家只需要实现这个接口的,实现这个接口,然后就可以使用了。实现。Catch接口即可啊,你把你实现的这个catch接口全类名啊,放在这个type上指定就行了啊,这是我们缓存,那我们呢,就用这些策略,我放在这儿来体验一下。好,这是第二步,我们得开启这个缓存,第三步特别注意的一步,因为如果这个缓存这个安全期间,人家会用序列化与反序列化技术,所以说呢,我们。那咱们这个P需要。实现序列化接口。接口好,我们把我们这个经常操作的这两个being employee,我也实现一个。序列化接口。比如呢,这个。
08:04
包括呢,我们这个department,我们也是线上序列化接口。我们把这些呢都实现上,这个序列化接口我们就有了。加一个这个标识好。然后呢,我们来测试,怎么测试呢。我们写一个新的方法。Public b test。咱们这个second。对catch,那么这个二级缓存。第二级缓存呢,好,这一堆操作我先拿过来。好,我们finally。到好,我们把这个session呢给他。
09:03
嗯。块要抛异常抛出去好,现在呢,我们来看啊。我们二级缓存。比如说这是我第一个啊session。我们再来获取一个session,我们获取上两个session。Open session。哎,这是两次绘画,但是呢,两次绘画都来查询同一个数据。好看好啊。这是呢,我们open session拿到的,这个我们用open session2再来拿到。还是这个门。Their class。如果。我们都来查询一号员工。一查询。好,这是我呢,我们来调用第一个map查询到的一号员工。Six six eight。好,我们查询到EP01。
10:07
行,查完以后呢,我就把这个会话关掉。第一个绘画我用完了我就关掉,接下来我用第二个绘画的这个map。查询。查询号员。EP02。查完以后。EP02,好,查完以后呢,我们把第二个会话也关掉。这个操作如果没有二级缓存,因为这是两次会话,肯定得发两个circle,所以说呢,我们先把二级缓存的配置我先注掉。这是没有二级缓存。我们来测试一下是不是发送了两个色。走。好,我们来写test。
11:02
好,我们来测试。走。好,我们来看效果。这时呢,我们都查一号员工,但是发了两次SQ语句,因为这是两个会话。如果我们开启了二级缓存。第一个绘画一旦一关闭,它里边的数据就会放在这个缓存中,别人就能用了,我们再来看效果。走。好,我们来看。这呢是咱们打印的第一条数据,他发了一条circle,第二个数据我们来看,虽然是不同的circle session,但是我们来看他在拿数据之前打印了一句话叫catch hit缓存命中率,比如说呢,他去缓存中拿到了我们这个employee对象。哎,这个0.5的意思呢,就是他第二次查缓存,哎,又一次命中这个0.0,也就是说呢,第一次查缓存,哎。
12:04
第一次查缓存,没有在二级缓存中找到。所以说呢,我们看到了这个啊,终于看到了这个效果,就是我们这个虽然session不同,我们第二次查询。第二次查询。是从。二级缓存中。数据并没有。发送新的circle。没发口的原因呢,就是因为我们第一次会话查出了,哎,一号员工。然后这个会话虽然关了,但是这个一号员工查出的数据就在employee对应的那个缓存中。你第二次还是要用employee map来查询一号员工,他就直接在这个缓存中拿到这个数据就行了,所以说呢啊,这是我们这个二级缓存看到的这个效果。
13:07
就是呢,我们这个数据啊汇总。二级缓存中获取。这二级缓存使用大家一定要注意,只有等你这个绘画关了才行,如果我把这个关会画你看好啊,我写在并列写起来。我第一次呢,拿第一个session来查一号员工,拿第二个session来查一号员工。但是呢,我们把这个关闭是写在所有的查询之后来测试。看效果。哎,他还是发了两个蛇口,哎,就是因为。我们每一次查询出的这个数据,它会被先放在一级缓存中,你只有会话给关掉了,二级缓存中才会有这个数据,所以说呢,哎,我们来注意一下。
14:00
查出的数据。却都会被默认先放在咱们这个一级话筒中。只有咱们这个绘画。提交或者咱们这个关闭以后。以后咱们这个呢,一级缓存中的数据。缓存中的数据才会。转到。转移。到咱们这个二级缓存中。这块呢,大家注意一下啊,这就是我们二级缓存的使用也非常简单,诶,你在这里边写一个看指标签就行了,但是也是可想而知。你在哪个map下写了,看哪个map下就会有二级缓存。
15:03
如果我们在department member下没写用二级缓存,那它里边就是没有二级缓存的,我们也可以演示一下,那department呢?啊,我们没有选二级缓存。我把这个方法再来测试一遍。我们来看department能不能用到二级缓存啊,都是拿我们重新拿。我们拿department。好,我们都是来拿department。我们来调用map的每一个方法。member.get department8id1好,我查一号部门。然后呢,这个也一样,member.get department ID,查一号部门,这是MEMBER2啊。然后呢,两次部门查询之间,好一号部门查完以后,我把会话一关数据,哎,理应进二级缓存,但是有没有我们来看一下,我先c out输出。
16:11
输出这个部门信息。把查出的这个我也输出。我们就来看我们没有给department member里边配置咱们这个catch标签。走。我们来看。诶,你看是不是就没效果啊,还是发了两次circle,比如说呢,你并没有二级缓存,你只需要呢,来到department member中好写一个catch标签啊,我们啥都不写,那就那些属性都应用默认的配置,这样这种情况下就会有二级缓存走。诶,我们来看,诶有了发了一次circle扣,第二次这个部门他是从缓存中拿的catch hit RA又来命中缓存了啊。
17:04
啊,所以说呢,这是我们二级缓存的使用,大家注意一下。
我来说两句