00:00
好,前面呢,我们测试使用了red table来操作red,那么接下来呢,我们就来测试缓存,那在测试缓存之前,我们来先来说一下咱们这个缓存的这个原理,首先这个原理呢,我们来说默认呢,之前用的是一个coner map的缓存管理器,这有一个叫缓存管理器,诶它帮我们来创建出缓存组件,然后呢,缓存组件,缓存组件来实际,哎实际的c rud给缓存中给缓存中,然后呢,C rud数据我们就叫存取数据吧,好,存储数据,那么呢,我们现在来看,我们引入了red以后会发生什么样的效果呢?我们还是在这一块呢,将自动配置的报告打开,那么呢,我来启动一下我们整个应用。好,我们把这个主程序呢,来启动起来,我们看自动配置报告里边,原来呢,我们说有非常多的这个缓存配置类,这些配置类呢,我们现在看开启了哪个默认呢,是开启了simple catch,来我们加了red以后来搜索一下,好这个缓存配置呢,我们发现这块呢,Red catch con match的,然后我们引入它就呢匹配上了,那其他的呢,哎,再来看一下,剩下的呢,都是don't match,那我们这个simple catch configuration还有吗?来看,诶刚才我们给过了,好我们发现呢,它就已经不匹配了,那为什么不匹配了呢?我们来control c来复制把它搜索过来,来看这个simple catch configuration,它要呢能起作用的效果就是condition on Miss being,容器中没有看manager,然后呢,我们之前都说过,这些配置呢,是有顺序的,我们引入red以后呢,来看这个red。
01:56
我们引入以后呢,啊,这个相应的东西就成立了,也能用了,而这个配置呢,也是判断容器中如果没有catch门,这相当于它呢提前判断成功,然后在这一块呢,诶,它给容器中放了一个缓存管理器,叫red看manager,理相当于是说呢,我们第一步引入red的start以后,Red的starter我们这个容器中保存的是catch manager,那么剩下的catch manager那自然而然就没有起作用了,那这个RA catch manager它干什么呢?们来复制它呢,是帮我们来创建创建创建哪个缓存呢?我们来看一下red catch manager,诶在这然后呢,我们来点进去,它呢会帮我们来我们来看它创建缓存的。
02:56
方法诶,这是设置缓存的名字,来往下翻。
03:01
哎,这有加载缓存,加载缓存呢,它这一块判断,如果说我们要加载缓存是空的,我们得到了一些什么文件,这就有一个创建缓存,它创建呢是一个叫RASC。RA来作为缓存。来作为作为缓存组件,那么这个red看呢,它就是通过操作red来缓存数据的,Red缓存数据的好,那么相当于我们说了这一堆呢,其实相当于这些都已经自动配置好了,那我就直接来测试就行了,好把它停掉,然后呢,我们来启动一下这个应用来测试看一下我们来缓存一号员工,哎,能不能起效果好,那呢在这发请求来E1。好,查询一号员工,这是第一次查询,我们来看我们这个控制台,第一次查询一号员工来我们这个控制台打印了SQ语句,说明查数据库了,那我以后再来查询,我来刷新来看一下,来我发现呢,没有查数据库,说明查缓存了,缓存呢默认只有这个red起作用了,那肯定是存在red里边了,我们在red里边来看一下reload,哎,我们发现呢,它多了一个这个键值,哎我们发现呢,这一块呢是,哎又是我们之前说的这个序列化后的结果,哎我们现在来看一下默认默认保存数据,哎,特别是呢,KV都是对象的时候,都是object,然后呢,它是利用咱们这个序列化来保存的,这个序列化呢,我们之前在这个b employee里边,我们实现了序列化接口,所以呢,它是进行。
04:56
序列化到我们这个release里边了,那我们现在呢,想要保存为杰森,如何让它自动的如何保存JS,我们再来呢,分析一下它的这个原理,因用呢,我们这个引入了这个red,引入了red的咱们这个start,所以说呢,我们这个catch manager。
05:19
Catch manager manager变为,哎,我们刚才说的这个叫catch manager,而这个red catch manager是怎么过来的,来到red catch configuration里边,它帮我们创建red manager,好,这是第一步,第二步默认创建的。默认默认创建的咱们这个catch manager。啊,然后呢,在操作我们这个呃数据的时候,大家来看啊,传了一个叫red object这个东西啊,这个看什么呢?他在操作rabbit的时候。
06:05
使用的是它啊,这个red object object是咱们这个red auto configuration好,就是它把我们创建的来,它默认用的序列化机制点进来,这是JDK,我们来看啊序列化器,这是JDK,包括我们以前测试的时候也是这样,所以说呢,我来把它写完好,那么它是。默认使用,默认使用JDK的序列化机制,所以呢,相当于哎,它默认给我们放的这个catch manager,哎现在呢,还不太符合我们的要求,那我怎么办呢?我就来自定义catch manager。自定义咱们这个catch manager,好,我们呢也用这个red catch manager,因为它呢能帮我们来创建,只不过呢,它默认操作的这个red object object我们就不用了,好我们在这个配置里边呢,我们在我们配置里边,我们来自己写一个public,我们就来放一个catch manager,我们就叫employee,我们员工的缓存管理器,缓存管理器啊,我们用,我们把它呢放在容器中,怎么放呢?好,我们来看人家之前是怎么配的,我们在这也怎么配就行了,来到这个red的catch configuration,其实呢,就是直接拗一个catch manager,把我们这个time传进来啊,我就把这两个呢复制来。
07:44
复制来。我们来到我们的这个配置类里边。好,复制过来,复制过来呢,这个red table,我们用的是这个方法的,哎,我们直接把它注入进来,这个叫red table,它。
08:01
好,我们把这个呢当成参数传进来,它呢就会把这个自动注入进来,因为上边这个方法已经有了,它注入进来,我们呢用这个看好用它以后呢,那我们就直接把它返回,Return,我们把这个缓存管理器返回,我来看人家写的这一块呢,也是这么来写的,Configu,只不过呢,它给我们多写了一个,这个叫custom in worker,这就是呢,你可以传一些缓存管理器的这个定制器,可以用它来定制,那这个呢,我们一般不怎么用。啊,我说呢,这是给我们提供一种方案,它可以来定制咱们这个缓存的一些规则,但是即使这个定制规则现在还不能满足我们的需求,好,那这个缓存管理器创建出来,那系统默认的缓存管理器,我们来看它创的这个缓存管理器的条件是什么,它的条件是咱们容器中没有这个看什慢值,而我们一写以后,相当于容器中就有我们这个red manager,那就被替换过来了,来重新。
09:13
启动来测试一下,现在是不是这样呢?好启动起来,然后呢,来刷新刷新。好,我们查询一号张三,我们现在来看,第一次呢查了数据库,然后呢,第二次我来刷新,好没有查数据库,哎,这没有查数据库,没打印circle,我们来到这个red里边,我们来reload一下,哎,我发现呢,EP里边有一个前缀叫EP冒号一,诶它的值呢,就是我们序列啊,我们用阶层的方式序列化过来的,哎,所以说呢,这是一个非常好的,而这个前缀是从哪来呢?我发现这个K啊啊多了一个前缀啊发现了现在呢,我们这个K多了,多了一个前缀。
10:08
因为如果说我们以前默认用这个K,我们来到这个service里边,我们来看这些方法查询员工,我们说默认其实就是传的这个参数值,就是这个ID1嘛,但是它怎么会多一个K呢?就是由于我们在这儿配我们red manager,哎,我们设置了一个叫使用前缀,使用前缀这样的话呢,它就默认会将咱们这个can吃name作为K的前缀,会将咱们这个开name作为K的前缀。这个呢也是比较好的,要不然我们数据里边都保存的是一啊,员工也是一,部门也是一,那么K跟K都叫一的话,那就重了,我们加一个前缀好EP的一,哎,不错,好,那这样呢,我们就算是转成杰森了,当然呢,可能还有一个问题,那假设呢,我现在再来写一个员工的service,哎,员工有了,我来写一个部门的来创建一个。
11:11
DEP service,我呢就简单的来引用一下缓存at service,好,然后呢,我们就来写一个查询方法,我们把dept map。Department member来看一下我们这个member呢叫department department member来注入进来,让他呢来帮我们来操作数据库,来查一条数据。好,Public。好,我们来get de pt8id,我们还是按照部门的ID来查,部门来传入一个inte的ID。好,然后呢我们来又调用dept点2GET dept8id,但是呢,我们现在这个map里边没有这个方法,我们就给它创建出来就行了啊这个查完以后呢,要返回department,好我把这一块呢先写完,然后呢al把这个方法呢创建出来,创建出来以后呢,好,我们来写上这个circle语句,标上circle语句select,我们的就叫呢select心。
12:24
From from,我们哪张表呢?我们来连上我们的这个数据库。连上我们这个数据库。好,我们呢,是咱们这个spring来有一张叫department表,就来放一个数据,你就叫开发部吧,开发部。好,保存,那我们就连上department这张表,哎,They from。问,这张好,来where where,条件是什么呢?我们这个ID就等于传过来的井号大括号ID,好,我们一写就行了,我们这个service呢,然后我们把它查到的呢,来返回,好,那接下来呢,我还一样,我给它标一个注解叫catch able,这个呢是可缓存的,来,我来sit out,如果进来,那我们就写查询部门。
13:22
哪个部门呢,它的ID也拼上,那这个呢,是一个可缓存的,我们用的这个缓存的名字是什么呢?我们就用成dept啊,我们自己写一个名字,那K呢,默认就是这个值,我们让它来缓存,那行不行呢,我来启动一下。好,那启动起来呢,我们来看一下,我来查询咱们这个部门,哦,那我们这个crler也得写上,为了测试方便,好,我来写一个,有一个class,我就叫de PT controller,好,我们来标一个注解,叫rest control,好,直接呢来一个方法,Public public,嗯,Department,好,我们get de PT传入一个的ID的ID,好,这个路径呢,我们来写上,映射这个get特单品来映射我们这个部门dept的来,我们来带上路径变量ID。
14:30
那在这一块呢,我们需要取出pass variable来取出路径变量的值,好取出这个ID值,然后呢,我们来调用这个service department service。DEP service,好,这个DEP service,我们来把它注入进来。O表,好,来调用这个方法,第一批service.get把ID,我们把这个ID传过来,然后呢把它返回写给页面,好这个service的这个方法呢,是一个可缓存的,好,我们来重新启动来测试。
15:08
看一下这个可缓存的能不能起效。好,我们来查一号的de PT来写一个一来查一号部门回撤来,我们发现呢,这个查查出来了,有返回,我们来看第一次,第一次呢,查询部门一在这,好,这个部门呢,已经出来了,没问题,我们来看第二次,我们先来看red里边,哎,有没有存数据的。来我们来看第1PT里边也有,哎,一号部门的监测数据也有,那我们第二次来查,那就要走缓存了,走。但是我们发现啊,这块走缓存是走缓存了,但是他说不能读取接省数据,不能读取接省数据的原因是什么?他说啊,他有五个五个属性要映射什么last name ID email,这些是员工的,但是呢,我们查出来的数据是部门的,相当于要把部门的杰转成员工的employ对象,它没有转换成功,那为什么呢?这就是由于我们放到这个red catch manager,它是操作员工的,所以呢能给里边现在我们看到的这个效果啊,就很神奇,它呢是数据能存进去,我们来到这第1PT service里面,这个效果呢,就是缓存的数据,缓存的数据能存入red。
16:40
要存数据,我们把它序列化成杰森,我们不管对象是什么都行,但是呢,我们第二次,第二次从缓存中查询就不能反序列化回来了,化回来原因就是由于我们存的是dept的接省数据,而我们这个看尺manager默认是用是用什么呢?是用我们这个叫employee的table来操作的。
17:20
默认使用这个操作,操作相当于他呢,只能帮我们将employee的这个数据,哎,杰层数据我们来反序列化过来,它是来这么来搞的,那我怎么办呢?来相当于呢,我们现在用的这一个就不行了,那我们就得针对不同情况不同配置,那我再来一个catch尺门这。看什么manager,看什manager呢,我们就叫dept,我们叫部门的缓存管理器,那这一块呢,我们就最好用咱们这个能序列化咱们这个部门对象的,那当然好,那么这个呢,我们就叫,我们就叫dept吧,De PT de PT好,我来把它复制来,但是呢,我们来说这个部门的这个term里,我们现在呢,又没有,没有怎么办呀,没有呢,我们就之前呢,我们创建了一个操作员工的,那我再来操,创建一个操作部门的,好,那么呢,就叫第1PT。
18:32
好,然后呢,我们把这里边儿的泛型,我们都改成能反序列化部门的这一块,好,包括这一块的class。都改过了。这一块反型好都改过来,那好相当于呢,我们就有能操作啊部门的能操作员工的各种temp里,那我们啊这个部门的缓存管理器就用操作部门的这个red,那有了它以后,关键两个red manager用哪个呢?那接下来我们就可以来指定了,比如我们在哎employee service里边,我们在啊这个ready catch conflictf里边来统一指定来,反正呢,大家都缓存用的是啊咱们这个员工的我们catch manager我们都来指定我们用。
19:22
咱们这个employee catch manager,我们说这个catch manager的ID默认就是这个方法名好,我们直接在这个service里边来指定,那同样的我们的部门的service,那我们也用这个看conf,我们来统一指定一下,那也可以在每一个方法里边好,这是可以统一指定,可也可以在这个方法里边,我们之前说的有一个属性,我们后来再说的就是这个看什么位置好,我们来指定用部门部门的DEP的好,这个写好以后呢,我们来重新启动一下,看一下我们现在这个部门能不能反序列化过来呢。
20:05
好,我们把原来的这个数据呢啊,我们我们来删掉啊,哎,好,我直接flash吧,把整个清空掉。好,我们发现呢,这一块会有问题,说没有一个B叫catch manager找到啊,我们有多个的情况下,你看啊,一定要把一个看什manager作为主啊,我们默认配置的缓存管理器啊,那么呢,比如我们可以把它作为一个,呃,默认使用的,我们来标一个注解叫primary,哎,这一块呢,都帮我们来提示了,好,那好我来再来重新启动。一定要有一个默认的缓存管理器。好多个的情况下,好,我们把它标成默认,现在呢,启动起来了,启动起来以后呢,好,我来重新来部门刷新,好刷新以后呢,来看里边。
21:02
好,部门数据存过来了。包括呢,我们来看控制台,它是查了数据库给red里边缓存的,那接下来我再来查刷新,诶我们发现呢,他查出来了是走了red,诶然后呢,他也反序列化成功了,那同样的我再来把员工尝试一下MP。好,这个员工呢,也没问题,我们来看red里边,我们来reload,好员工呢,在这儿也有数据,我再来刷新,哎,也能反序列化过来,哎,所以说整个配置呢,就生效,包括大家来看这个primary的作用呢,就是默认它是哎,它是我们默认用的catch manager不指定的情况下,那接下来我们这个employee service,我呢其实就可以不指定了,不指定呢,那就用我们默认的。啊,我们相当于用primary注解啊标注的,它是一个主要的默认的,特别是在多个的情况下啊,那来启动起来以后呢,我们来看员工还行不行,我来刷新,哎员工行没问题,包括呢部门也行,第1PT一会撤好功能呢都一切正常,没有问题,当然我们不应该呢,将这个catch manager作为默认的,哎如果在开发中就说呢,我们应该将啊还是人家写的之前写的这个写的这个object,也就说能操作所有东西的,我们应该作为默认的,大家呢在这来放一个就行了,好,我呢做一个简单演示,哎,主要是这个primary将将某个缓存管理器作为默认的啊默认使用的好,那么我们这个自定义缓存管理器,我们就。
22:51
都说完了。而且呢,我们现在呢,都用的是注解的方式,给缓存里边存数据,当然在开发中我们经常能在代码内部,比如这一行来,我突然搞到一个数据,我要给缓存中放来,怎么办呢?比如我把这个呢,我来注掉,哎我用编码的方式,Public还是这个department,好,我来复制来吧,我把这个注解呢注掉,我们呢用编码的方式,那编码的方式怎么用呢?我们还是茶园通。
23:23
查员工好,这个查出这个,呃查部门,我们查出部门以后,我可以这么来写,怎么来写呢?我们就给缓存中来放,我可以把我们这个catch manager我来注入进来,我们注入谁呢?我们这个有很多的catch manager,我们就注入这个dept,看什manager好,那就注入部门的这个缓存管理器o where好,那默认的它按照这个名字,因为有多个缓存管理器,我们让他呢,我们可以来指定一个Co范,好明确的让他指定我们用。
24:01
ID为它的这个缓存管理器好指定过来以后呢,那接下来我们就可以用它,我们叫dept,我们用这个缓存管理器点,哎,我们就直接get catch,我们获取缓存就行了,获取谁呢?我们就获取dept,哎这就相当于我们catch Apple里边catch name指定的它好能获取一个缓存,哎,我们拿到这个缓存以后呢,我们就给缓存里边增删改数据,哎,这时呢,来获取某个缓存,然后呢,这个缓存的这些操作我们就能用了,这就是在编码内部,比如呢,我们来put一个好,我们来put可呢,我们就叫,哎,那就叫咱们这个叫一好值呢就叫一,或者呢,应该叫DPT冒号一好那么我们的这个K是这个值呢,就是我们这个dept对象啊,那这样呢,相当于也放进缓存里边,只不过呢,这个方法不是可缓存了,我们给缓存里边用编码的方式呢,放了一条。
25:01
数据我来启动一下,看一下我们这条数据啊,放进去行不行,那么增删改查数据都是一样,使用缓存管理器,拿到缓存操作缓存就行了,好,我把这个catch many,我把这个red呢直接清空掉,清空掉呢,我们来尝试一下查询一号部门回撤,好我们部门查完了以后呢,我们通过编码的方式主动的给缓存里面放了数据,我来打开们来展开看一下,诶dept DEP t1哎,已经有了这个数据了,哎。我们后边的这个DPT,这是我们写的K,而前面的dept是人家加的这个前缀,好反正呢,现在这个数据是进来了,好没问题,这就是呢,我们如何在后来用编码的方式再来使用缓存啊,很简单,就直接啊使用缓存管理器。管理器得到缓存操作就行了,进行API调用即可好,注解的方式,编码的方式啊,都是这么来用。
我来说两句