00:00
好,前面呢,我们通过看包注解分析了一下我们缓存的配置原理,以及它的运行流程,那么接下来呢,我们就来看一下看包注解里边重要的这些属性的用法,这些属性呢,我们前面做了一个简单介绍,然后呢我们在这进行一些测试。这个属性呢,我们先来说它第一个属性叫catch names或者写value,说这一块呢,我们来写catch names或者value,它代表的呢,都是说我们要将方法的这个返回值我们放在哪个缓存中,所以说呢,这一块用c names或value都行,而且呢,它们是一个数组的形式,就是说我们可以指定放在多个环境里边,呃,它的指定将。将。方法的返回结果放在哪个缓存中,然后呢是数组的方式。数数组的方式可以指定多个缓存。
01:03
这个呢,我们就简单让它过了,然后呢,我们来主要看我们这个KK呢,就是我们缓存数据时用的我们这个件,这个件呢,我们之前说过,它默认啊是方法参数的值,好我们之上节课的断点呢,我们还在这儿,我们在这儿打上断点们暂停一下,们看一下我们这个是不是这个样子把它停掉,然后呢,我们以debug的方式运行来看,在缓存的时候。它K确定的值是什么?好,我们来发送请求来查询二号员工好,来到我们这儿,然后呢,这是第一步拿到缓存,我们直接放行来放行呢,下边是在缓存里面找,但是在这会确定一个K来往下走,你发现呢,这个K啊,确定的值这一块呢,是二就是呢,它默认用的就是我们这个参数的值,那好我直接放行,放行以后呢,它是先从缓存中查,哎,这就是我们之前的这个效果,查完以后呢,由于没有,然后运行目标方法,运行完以后呢,将我们这个数据,哎,二号数据放在这个值呢,就是我们这个对象,哎,方法返回到这个对象,放进我们这个store里边,好。
02:14
那么直接呢,给他放行呢,我们看到它用到的K呢,是咱们这个参数的值,那么我们呢,当然也可以来指定它来写一个K。那么指定的时候呢,我们还可以写咱们这个SP表达式来进行动态指定,这个表达式的写法是什么样呢?来参照我之前PPT给大家介绍,那么这个spr表达式呢,可以用的一些原数据在这儿,首先呢,我们可以从更对象来访问一些数据,比如方法名以及方法,以及咱们这个目标对象,咱们这个目标对象类,包括呢,我们方法的这个参数列表,包括呢,我们这个缓存,所有的这个缓存,缓存呢,我们可以拿到每一个的缓存名字,包括呢,我们这个参数的名,我们直接井号参数名的方式,包括还有咱们这个result,代表我们返回的这个结果,这个呢我们后来再说,然后呢,我们来测试一下,假设呢,我现在这个K,我想让它变成这种形式,Get emp,然后呢,中括号里边ID如果是一,那就是一,二就是二,我想把K呢变成这个字符串,那我怎么指定呢?哎,我在K这呢,我可以写一个井号。
03:25
Root,那么root呢,我们从root这个跟对象里边,我能访问到man的name方法名,方法名呢,我们再来拼上咱们这个字符串啊,这有中括号,而这个二呢,又是取出参数的值,那我们来拼接一下,加上拼接呢,我们用单引号来把咱们这个。哎,中括号我来写上,再来拼上我们井号。ID减号,ID直接写咱们这个参数名,就代表取出这个参数的值啊,这个拼好了,那再来拼一个。后中括号,好,这样我们拼好了以后呢,我又重新debug运行,我们看这次的K用的是不是我们自己指定的,好我们以debug的方式进行运行。
04:11
我们来刷新,刷新一下,来查询二号员工。好,我们来看我们的这个方法,方案进来以后呢,我们先拿到缓存,好我们下一步走,我们让它生成K走生成的K呢,我们看到诶就叫get EP,哎是咱们这个差九个字符的这个字符串,所以呢,我们已经能自定义我们要用到K了,好我们直接给它放行。然后呢,这是我们第一种,我们可以用K,用SP表达式来指定我们要用的这个K是什么,那么除过用这种方式指定K,我们还可以用另外一种叫k generator,我们可以指定自己的K的生成器,哎,那我们呢,来自己来编写一个咱们这个K的生成器,好,我呢,我在这儿下边。
05:04
下边好,我来专门来写一个config包啊,我来在下边呢放一个config包,然后呢,我们自己来写一个类,比如呢,叫my catch conf,我们缓存的这个配置。我们首先来说这是一个配置类,在这个配置类中呢,我们来自己来写上一个key generator key generator,注意我们这个key generator呢,是我们缓存里边要用的这个key generator,好,我们就叫key generator。然后呢,我们把我们的这个key generator,我来自己来编写一个,我来new一个key generator,由于它是一个接口啊,我直接写匿名类不类的方式。好,我们添加这个实现的方法,这个方法呢,有一个方法叫generate,叫生成我们这个K怎么生成呢?它把目标对象方法参数都拿过来了,好,那我呢,就简单来写一下,我们方法拿到get name,我们拿到方法名再来拼上。
06:11
拼上什么呢?拼上我们中间的来隔开,拼上我们中间的这个参数表,我们用A。我用A,第二按list。啊,我们把这个,哎,我们来拼一下,把它的to我来拼一下,哎,这是我自己来定义的,我们这个K的生成策略,把这个K加呢,来返回出来,把它呢加在容器中,那么加在容器中默认这个组件的ID就叫k gen,我们来可以给一下,我们就叫my key generator。Generator。我选一来指定key genator这块指定什么呢?指定key genator的ID,我们在这一写就行了,好写了以后呢,我们重新得bug,看一下我们能不能用到我们这个生成器,包括呢,我们给我们自己的KR。
07:18
这个生成器的这个方法里边呢,来打上一个断点,如果被调用,我们打上断点,好,我们重新停止debug的方式来运行。好,启动起来以后呢,我来继续来请求二号员工来刷新。好,现在呢,来到获取缓存啊,往下走,现在呢是要生成我们这个K了,这个K的生成呢,我直接放行,诶我们发现来到我们自己的K展R了,那我们就要按照我们的策略来生成,那我就直接放行我们的策略得到K,诶我们看到就是这个样子,诶我们拿到这外边的中括二是我们拼的里边这个中括号,二是我们将数组转化的图string方法,哎,这是我们自己用k jar生成的这个K,所以说呢,我们也可以用它来指定我们K的生成策略,好放心。
08:14
就是我们要说的。这个第二种K的生成方式,我们来指定K展瑞塔,好,就是说呢,它。指定好我们K加write就行了,那么接下来我们还有一个属性叫catch manager,这是指定使用哪个啊,咱们这个缓存管理器,这个后来呢,我们整合多个缓存管理器的时候再说,主要呢,我们来说一个它condition condition呢叫符合条件的情况下才进行缓缓。这个方法返回的这个数据,我们还可以做一个动态判断,好我来写一个condition condition呢我们来判断,判断什么呢?假设说我们这个一号员工我给缓存,二号员工我不给缓存等等等等,那就可以在这儿来写判断条件。
09:06
我来写一个井号,我写一个号ID,那就是取出我们这个ID的这个值,或者呢,我写井号A0,取出我们第一个参数的值也行,只要它大于一,那么呢,我们才进行缓存,那这个意思就是。来,我们来解释一下。第一个参数,第一个参数的值大于一的时候。才进行缓存好,如果这个停条条条件成立,我们就进行缓存好,我把它停掉,停掉呢我们来测试一下我们这个condition条件,当条件里边SP表达式的用法呢,有非常多啊,我们就能写这么多的这个原数据的这些用法,我呢用一种来举上例子,我来刷新一下。要说呢,大于一的情况下我们才缓存,那如果我来查一号员工。
10:02
来查一号员工,来看控制台一号员工,我们查询的时候呢,会发语句,好,我如果再来一遍。我们发现呢,他还会发SQ语句,我再来查一遍,我们发现呢,他打印方法还会发送SQL语句,比如说像一号员工呢,并没有缓存,由于呢,他没有符合我们condition指定的这个条件,好,那我来二号员工。二号员工,二号员工呢,我来查询,二号员工第一次,哎,他给我们发了SQ语句查询,没问题,我再来二号员工刷新。哎,我们发现这一块没有发送SQ语句了,也没有打信查询20号员工这句话了,有这个方法就没进来,我condition,我们可以来指定这个条件,包括呢,我们还可以指定更多,并且我来指定一个比如井号route.method name,我还可以指定这个方法名equal,哎,等于一个字符串,比如我写一个AAA等等等等,也说我们可以写非常多的判断条件在这,哎,我呢只是以一个来举一个例子。
11:09
好,这是我们这个condition啊,我们符合条件才缓存,接下来呢,还有一个叫unless。Unless什么叫unless呢?这个unless叫否定缓存,我们之前说的,诶,除非那除非是哪种条条件下我就不缓存了,我指unless指定的条件为true的情况下,那它就不会空。换成了,那如果我我还写一个井号A0。A,等么个。如果第一个参数的值啊是二,那么我们这个结果不划算。那么我们会发现呢,如果我们查二号员工虽然满足condition,但是呢,Unless也满足了,那一满足unless直接就否定了,我们就不缓存了,现在二号员工现在也不缓存,原来呢,我们是缓存了,我现在再来测试一下,来把这个呢停掉,来重新启动。
12:15
我们这么一调以后,一号二号员工都不会缓存,首先一号员工不满足condition条件,而二号员工呢,又不满足unless条件,哎,二号员工是满足unless啊,一满足我们就不缓存,我们来看一号。我们来回车,我发现呢,查询一号员工打印SQL语句发送,我再来刷新啊还是一样查询一号打印SQ语句发送,并没有使用缓存,我们来看二号员工,二号员工我们来发送请求,我们来看诶我们查询员工SQ语句打印,包括呢我们再来一次好。查询员工SQL语句打印,所以说呢,也是没有用到缓存,还有呢,我们最后一个属性是否异步,也就说默认呢,是我们方法执行完,以同步的方式将方法返回的结果存在缓存中,我们可以将它调为处使用异步的模式,那么这个异步模式的情况下呢,这会有一个问题,默认呢是force异步模式情况下,说咱们这个unless啊就不支持了,所以呢,这是我们最后一个异步属性,那其他的看尺这个注解里边的这些属性用法都是一样的,那就说一个大家下边呢都可以来试一试。
我来说两句