00:00
好,接下来呢,我们再来说一个注解,哎,我们这个注解呢,就叫。这个注解呢,我们发现它里边呢,相当于是catchable catch put catch的组合注解说当我们有一些方法缓存的规则比较复杂的时候,那就可以用CTRL注解来指定多个复杂规则,好,比如呢,我们来写一个方法,我们来查出一个员工get EP,但是呢,我是按照用户名查询的,按照员工的last name来查询。那么我们来传入员工的名字,传入员工的名字我们呢,调用employee member的,比如我们有一个叫GET8。好,把这个呢来传进来,但是我们没有这个方法,我就来把这个方法创建出来,我们来把这个SQL语句呢来写上它查询完返回一个employee,你就来写一个select查询。
01:05
查询呢,就select星from这一块,好,我们把这个复制来,We last name等于我们传过来的纸。好,那么接下来呢,我们这个方法写上了以后呢,我们把它返回过来,但是呢,我给这个方法呢,我来多加上一些缓存规则,那我就用an can来指定多个缓存规则,怎么指定呢?它里边有非常多的规则,比如你想要用catch,你就用它指定,你想要用put规则,你就用它,那我们就来写上两个,比如catch able规则,首先这个规则呢,它也是一个数组,相当于能指定多个catch able注解的好,那么来主定指定第一个catch able。好,我们来指定catch,我们指定呢,让它还是缓存在来,比如我们方法运行完了,说这个方法是一个可缓存的,你将运行后的结果你放在EP这个缓存中,用的这个K呢,哎,我们就来按照这个方法的传过来的参数用last name来缓存,其实呢,我用了catchable以后,我来再来多用一些规则,还有catch put,我来用上规则。
02:24
Put这个put规则呢,由于我们这个put呢,我们说它是可以是在方法运行之后调用的,所以说呢,我们来指定put规则,我还可以这么来写can put我们呢还是给缓存中放数据,而由于put呢,我们已经拿到结果了,接下来我用K,我用什么呢?哎,我按照ID把查出来的这个员工也放进去,所以说我写一个井号result代表返回到这个employee员工数据点ID,我现在呢用ID来放咱们这个数据,包括呢,我再来多写几个,看吃put呢,我再来写一个can吃put。
03:10
好,Y6等于EP。连PK呢,我还是用返回结果里边井号result好K呢,我用它的邮箱,哎,我按照这个邮箱呢,也作为缓存的K,我放进去相当于我来查了一个咱们这个。员工数据,然后呢,员工的名字在缓存中有员工的ID,员工的邮箱,你按照名字ID邮箱在缓存中都能查到这个员工好,我写了这个方法,那我在ctrler里边呢,我就来多测几下,Ctrler里边呢有一个按照ID查询的,那我在controller里边,我再来写一个,按照咱们这个。名字查询的get mp8。
04:00
Last name。好,我们就让它传入我们的这个名字lastname,我们直接调用employee service.get把last name,把last name传进去,然后呢,将它返回过来。好,反应过来以后呢,我们来还是发送get mapping请求,我们就叫呢。EP,好,带上last name,当last name的值呢?我来带在咱们这个路径变量上来,我为啥把这个last name放在这呢?因为这有个路径变量ID啊,不能让它重起来。好,Pass variable,取出这个路径变量里边的这个last name的值,好来启动测试一下。我们用这个名字查出这些员工,好来清掉咱们这个控制台,来EP按照名字查,名字呢,在后边来带上一个张三。
05:06
张三回车,哎,我们查到了一号张三,那么按照名字查到一号张三以后呢,我们这个呢,标了一个复杂的缓存规则,我们同时呢,按照ID也给缓存中把最后的结果放进去了,所以呢,如果我们按照ID再来查张三来看一下。他还需不需要查数据库呢?按照ID我们来查一号回车,我们查到了张三,看控制台,哎,我们并没有查数据库,哎,就是说呢,我们这些缓存注解起作用了,那相相当于我们再用email查也不需要查数据库了,那我们用last name呢来查呢?啊,因为以前已经查过张三了,我们查一下看一看刷新。哎,我们来看一下控制台,我们发现啊,你用拉name查的时候,它还查了数据库,为什么呢?因为我们这个方法上虽然标注了复杂的缓存规则,但是呢,有can put注解,Can put注解的意义就在于这个方法一定要执行的,所以说呢,如果我们按照名字来查,那么这个方法还是会执行的好,那么这就是我们这个堪称组合注解,哎,它来定义复杂的缓存规则。
06:24
嗯,定义啊,复杂的缓算规则,那么接下来呢,还有一个注解,我们会发现在我们这个员工的这个service里边,我们要用到缓存,基本上呢,我们都用,呃,Y6等于emmp,都用这个员工缓存,每一个都来写这个也太麻烦了,那么我们可以有这一种写法,哎,我们可以给类上来加一个注解,叫catch config,哎,我们一听叫缓存配置,缓存配置里边能写什么呢?能写我们公共要用的缓存的名字,包括呢,整个类里边所有确定K的时候,我们要用哪个key genator,包括呢,你还能指定所有的缓存取自于哪个catch manager,所以说呢,这一块公共的属性都能指定,那我呢,就在这来指定Y6等于EP,那我在这指定了Y6等于EP,这没Y6,它叫r names等于P,那以后的这些Y。
07:25
六等于emmp我们都可以不写了,那这些Y6等于emp呢?好,这个写上,那其他的这几个呢,比如我注掉几个put注掉好,特别是这个复杂的这个缓存注解我都注掉。它呢也是可以工作的好,哎,住的,然后呢,我们重新启动。把刚才的这个效果呢,我们再来测一下,按照last name查,按照ID就不用查数据库,还是从缓存中去按照last last name我们来刷新,好他呢先查数据库,我们发现呢也没报错,说明也缓存了,缓存放到哪了啊,我们前面有公共配置了,然后呢,我按照ID来查刷新,哎,我发现呢没有经过数据库,一切还都是起效果的,所以呢,这就是我们缓存里边要说的最后两个注解,Catch跟catch conf catch conf的作用就是抽取缓存的公共配置,那么整个类里边所有缓存的公共配置都看这。
我来说两句