00:00
好,接下来呢,我们就在系统里边整合spring catch来简化我们缓存的开发,整个整合spring catch的步骤,我们在这来记录一下,好,我们现在来做第八个事情,那这个整合咱们这个square catch,简化缓存开发,这整合的步骤呢,都是我们第一步,我们先来引入依赖,我们要整合缓存,那么第一步引入的依赖就是引入我们的缓存场景,我们直接来到这来写一个dependency,有一个叫catch spring boot starter catch,那就是它,诶我们也不用写版本号CTRLY,这是我们引的第一个场景,我们相当使用缓存场景,我们把它先引入进来,然后呢,第二个场景,我们现在想要用red来作为缓存,所以得引入我们这个red。开发场景,那么这个red场景呢,我们已经赢了,就是这个,所以我们想用red作为缓存,那么就来引这两个。
01:06
接下来我们这个第二步,第二步我们就要写配置。来看一下我们用缓存要配哪些东西,那写配置之前呢,我们先来帮大家搞懂一下,他帮我们自动配置了哪些,自动配置了哪些,我们想着一引入缓存场景,就得触发一些缓存的自动配置,缓存的自动配置呢,在这个。里边有一个叫auto configuration。诶,我们一听就叫缓存的自动配置,这个缓存的自动配置呢,写来一大堆,关键呢几个点,第一个我们缓存所有的插麦中能配的属性在这个里边封装的catch properties里边,相当于SPA catch开始的这些配置。接下来第二个它给容器中按照B放了一堆组件,除了这一堆组件外,我们再往下看,他还用一个叫catch configuration import,相当于拿这个选择器又倒了好多缓存的配置,这些东西都从哪导呢?大家可以答debug断点我就不看了,直接在这大家看看configurations所有缓存的配置类,从这里边得到每一种类型的缓存点过来,它按照缓存的类型在这来进行映射,我们来再点过来,这个映射呢,我们会看到是在这个静态代码块里边赋值的。
02:27
像类一有就有了,而如果我们用red缓存的话,我们看到如果我们缓存类型是用red,我们这就会有一个叫red catch configuration,好,我们主要把它拿来就行了,我们缓存的自动配置首先是catch auto auto configuration。会导入,会导入咱们这个red catch configuration,那会导入的原因,那在原码里边也都写了,那导入了这个red的这一块以后呢,接下来会发生什么事,我们来看这个red auto configuration这个好,我们把这个red catch configuration control n controlr v,我们给这一粘。
03:10
好,我们发现这个configuration里边一直往下翻,第一个按B,我们给容器中放了一个缓存管理器,诶,我们发现缓存管理器的效果了,相当于它已经自动配好了缓存管理器,诶我们这个东西都不用管,自动配好了缓存管理器,这是我们第一个,第二个我们再来看,再来往下这个缓存管理器里边,我们也会发现它自动配的时候,会根据我们这个缓存配置的所有我们配的缓存的名字来点过来,那相当于如果我们在配置文件中配了spring.catch catch names,我们配了,我们将把我们缓存的区域划分成哪些业务,我们配上了这些缓存的名字以后,它会在这儿也进行初始化。来点过来看一下。
04:01
就是在这它会来initial catch NAS初始化我们这个缓存,这个初始化缓存做的事情就非常多,把每一个缓存拿来便利,把缓存的这些配置跟当前缓存名呢放在一起,配置呢都是用默认配置,然后再利用这个默认配置,然后来初始化我们所有的缓存点过来,然后整个初始化逻辑呢,又在下边将所有缓存的这些配置拿来给这initial catchs里边一放,相当于我们哪些缓存都是哪些规则,最终我们都是在这保存好的red configuration里边,包括继续red configuration里边,再来定义缓存规则的时候,那大概来看一下缓存的规则有哪些,我们一会儿还要配,比如我们这有序列化机制,用JDK默认的序列化,还有我们这个TTL过期时间,这些时间呢,都是我们从properties里边得到的。那这个properties来点过来,你看就是它就是从我们配置文件中得到的。
05:01
包括我们每一个缓存键有没有前缀,还要要不要缓存空数据,以及我们是不是使用缓存的前缀等等等等,但这些东西是什么意思,我们先不用管,我们现在已经看到我们配了缓存管理器,缓存管理器呢,也会初始化所有的缓存,所以理所应当,我们只要导入了这个场景,什么都配好了,那接下来我们要配哪些?那我们得配这个,首先啊,我们在这一块它能导入red的缓存管理这个缓存配置,那就应该我们这个缓存是使用red来作为缓存的,所以我们首先在配置文件中,那为了好看起见,我专门来写一个properties配置文件,我们application,第2PROPERTIES,这样大家就知道我们都配了什么好,那么这个配置文件呢,我们先来看所有的缓存配置,都是以spring catch开始的,那先来配置一个缓存的类型,因为我们用的是red。所有。
06:01
我们来选中red,我们配一个它,然后第二个我们想来指定,还有一个叫缓存的名字,我们看到它会用所有缓存的名字来初始化缓存,我们也可以在这来指定。点过来。我们来看这一块的注释,说我们可以以逗号分割整的一个这个list,这都是这些缓存的这个名字,但是呢,通常我们如果配了这个,我们这种情况将会禁用,禁用什么功能呢?禁用我们这个on the fly,这就是即时,相当于我们会禁用实时的创建能缓存的功能,所以相当于它的意思就是你在这配了缓存的名字以后,名字全部按你配的来写,如果没配它还可以帮你,你系统中用到哪些缓存了,帮你自动创建出来。好,我们先不配,我们最简化配置,我们只需要说我们用的是red缓存,这样我们第二步我们只需要配置使用red作为缓存,配置使用red作为缓存,那接下来第三步我们就可以来测试了,测试使用缓存,那测试使用缓存呢,大家只需要掌握所缓存抽象的几个注解,包括文档里边。这也。
07:15
多了就这么几个注解,我把这个呢复制过来。CTRLC我来放到这。那我们用到哪个就一一来测哪个好,我把这些注解呢都放在这,这些注解呢,其实按照注解的名字我们都能猜到,它是想对缓存做什么事情好,我们把这个呢,复制过来走,比如第一个catch,如果我们使用了这个铸件,它叫tri,触发我们这个缓存population,这是移民转移的意思,就是呢,相当于触发把一个数据保存到缓存里边,触发将。数据保存到缓存的操作,这还有一个将catch evict,这evict呢相当于是缓存的删除,这是触发将数据从缓存删除的操作。将数据。
08:04
从缓存删除,还有一个叫catch put,这叫更新我们缓存,而且without就是没有,没有什么呢,叫影响我们这个方法的执行,相当于不影响我们方法执行的方式更新缓存,诶这叫不影响方法执行更新缓存。还有我们这个catch,这叫regros,相当于把它们重新分组,分组什么呢?Multiple相当于我们多种缓存操作,相当于这个东西就是组合多个缓存操作,比如我们一个事儿干完了,我既想清缓存,又想更新某个缓存,还想把这个数据呢放到另外一个里边,我们相当于要多个操作,我们就可以用它来组合,组合以上多个操作。还有一个堪称con catch con FA,这叫share共享,共享相同的一些缓存配置,诶,那这就是在类级别,那就是在类级别,类级别同一个类上共享缓存的相同配置。
09:13
行,我们说了这么几个注解来体会上一个就行了,我们只要配上了这些缓存,那么想要测试使用缓存,我们的步骤就是第一步先要开启缓存功能。我配置文件里边已经配了使用red作为缓存了,我把这个复制来,别忘了一定要开启我们这个缓存功能。使用哪个开启呢?一个非常简单的注解叫enable catch。好,这是我们做的第一步,接下来第二步我们只需要使用注解就行了,只需要使用注解就能完成缓存操作。比如我们测试一个最简单的方法,我们来到这个index controller,这个controller里边呢,有一个比较复杂的业务,获取一级的所有分类,我们把这个数据呢,想要缓存,如果按照我们以前我们得编写一大堆代码,那接下来怎么办?我们只需要标一个非常简单的注解,叫catchable catchable的意思就是这个东西是可缓存的,Catchable代表。
10:18
当前方法的结果,当前方法的结果需要缓存。而且呢,它会执行这个流程,如果缓存中有,比如我们这个第一次调用这个方法,如果缓存中有,那么就方法都不用调用了,方法不用调用,如果缓存中没有,如果缓存中没有,相当于我们第一次获取数据,它们就会调用方法,将查出的真实数据再放到缓存,诶跟我们之前的读模式效果是一模一样的,如果缓存中没有,那就会调用方法,调用方法。最后将方法的结果,方法的结果放入缓存,那这就跟我们以前写的就是一样了,以前我们需要一大堆代码,现在呢,我们只需要一个注解叫catch,那这个注解要用呢,我们现在来指定一个东西,就是我们以后把数据呢要缓存,用了spring catch以后,我们得指定一个唯一的东西,就是每一个需要缓存的数据,需要缓存的数据我们都来指定,都来。
11:26
都来指定要放到哪个名字的缓存,相当于我们这个是认为这是缓存的分区,就是我们自己给缓存分一个区,比如我们这个业务里边有各种不同类型的业务,这个分区我们推荐大家。按照业务类型,按照业务类型分,比如跟所有商品有关的,我们就叫商品分区,Product,跟分类有关的我们就叫分类分区,所以呢,我在这指定一个东西,指定什么呢?我们来看这里边能写的很非常多,我们指定value,或者跟catch names这两个呢,都是等同的,Ely for相当于它的别名就是catch names catch names的别名就是Y6,那指定哪个都行,所以呢,我就来写上一个,我如果用Y6,而且它还能是数组,哎,我这么一写,我写一个can格瑞,意思呢,我们这个最终方法运行的数据。
12:25
会放到category区的缓存里边,当然你想给多个区都放一份,比如我想给category区放一份,我也想给商品区放一份,比如product随便写,那么假设呢,现在就来写一个分区,好,那现在呢,就来将这个方法呢加入缓存了,而且呢,大家注意,如果方法调用了,我控制台会打印这个方法调用,我先来测试一下我缓存的整个逻辑缓存,大家发现非常简单,只要以前配red了,我们red都不用配,Red该怎么配还怎么配,然后呢,我们就告诉他,我们使用red作为缓存,接下来开启缓存注解,然后接下来我们给每一个方法来标注解就行了,就这么简单,我们来启动一下,那现在来启动商品服务,那么这个网关,这个网关都可以不用启动,我们来启动商品服务,直接拿商品服务来测试。
13:16
好,我们现在启动起来,我们来清空控制台,然后呢,我们来测试,我直接访问我们这个1万端口,这1万端口呢,我们会默认访问首页,首页呢第一次会要到所有的一级分类数据,这些数据呢,我们以前都是每次查数据库的,我们现在只标了一个注解,我们看他能不能走我们整个缓存的读逻辑,而大家注意,现在我们这个缓存里边应该没有数据。我管它有没有,我们直接将所有的东西我们都flash掉,好先缓存,里边什么都没有,我现在来访问首页,我来访问1万端口,我也不访问古力mail com来直接访问1万端口的首页点。好,发现呢,首页有数据来看控制台,控制台呢打印了get level1categories,想想我们这个方法呢,被调了,那掉了以后呢,我们来看一下缓存red里边数据点开,诶我们发现category里边再点开,这呢有一个缓存的数据,只不过它的名字叫什么simple key,这是他们默认生成的,然后数据呢,就长这样,这个样子呢,其实是我们JDK序列化后的结果,那们大概呢,都能看到,比如我们来重文本,那这都有图书什么东西,那相当于我们缓存里边有数据了,那理所应当,我第二次再来访问首页的时候,因为缓存中有了,那们这个方法就不用调了,那可以看一下,我来再来刷新首页刷新。
14:37
好,我们来看我们控制台,诶我们控制台呢,我们发现确实没有调用这个get level1cat,我们以后每次都来刷新首页刷新刷新刷新,我们都不会调用我们这个方法了啊,这一块打印的112啥的,这是我们这个CTRL了,在这打印的线程号没啥关系,所以我们发现没缓存呢,简单就用起来了,但是所有的东西呢,都是默认设置的,我们下一节课再来说我缓存使用的所有自定义的细节。
我来说两句