00:00
好,前面呢,我们搭建好了基本环境,那么接下来呢,我们就快速体验一下缓存的使用。好,我们这个快速体现缓存,那么要想使用缓存来,有了spring boot以后呢,我们只需要简单的两步步骤,我们来写上第一步,那么首先呢,开启基于注解的缓存。接下来第二步,我们来标注缓存注解就行了。即可,那缓存呢就能使用上,好,我们来第一步要开启基于注解的缓存,我们要使用enable。啊,我们使用这个注解,我们用它呢,开启基于注解的缓存,那么接下来呢,我们要给这些缓存的方法,我们来加上相关的注解,这注解呢,包括我们之前说的,哎,比如catch able来标注某一个方法是可缓存的,还有呢,我们这个叫catchit,哎表示呢我们缓存。
01:00
清除好,包括呢,还有我们一个注解,哎,看put来呢一体验一下它们的使用。好,那么我们首先呢,来给这个service方法,这儿呢有一个查询方法,目前呢是没有用到缓存的,我们来启动。启动呢,如果我们CTRL发请求来到service,那每一次发送请求这个service方法呢,都会调用,进而呢,调用我们这个map来查数据库来我们呢可以来看一下。那么这个控制台呢,我们来清空掉,然后呢,我们来发送来我们来查二号员工来刷新,哎,我们来看一下控制台,控制台呢,我们这个方法进来了,打印查询二号员工,我们每一次发请求,那么都是一次查询,而且都会联向数据库,包括呢,我们可以在这一块配置文件中,我们将这个日志也打印出来,LOG6点啊,我们将。com。
02:00
第二,硅谷。第二,Catch,我们这个member包下所有的这个SQL语句日志,来打印起来,来重新启动一下,只要每次查询,那我们都是直连数据库的。好,我们把这个清空,我们来刷新一下,这是第一次查询,哎,这打印查询二号员工,而且SQL语句在这儿也有打印说明连向了数据库,包括呢,我来第二次,诶这也是打印了查询二号员工,并且发送了SQL语句,就说明那现在呢是没有缓存的,要想缓存怎么办呢?我们先来体验第一个注解,要按它看吃able,它的作用呢,就是诶将我们这个将方法的运行结果,将方法的运行结果进行缓存。那么缓存起来以后呢,以后。再要。相同的数据。啊,我们就直接从缓存中获取。
03:02
哎,不用调用方法了,这样的话呢,相当于我们就不用来调用数据库来进行SQ查询了,好那么我们这个catch要用的话呢,它里边有几个属性来点进来,那核心的几个属性,第一个叫value,跟我们这个catch names其实是一样的,好来说我们这个catchable的几个属性。Value names,或者我们来写value,它的作用是什么呢?诶,我们来翻译过来就叫缓存的名字,它是来指定缓存的名字,这个作用是干什么,这就要追溯于我们以前说的一个原理,这个概念原理呢,有一个叫catch manager。叫缓存管理器,它是来管理多个缓存组件的。对缓存的真正操作。真正c rud操作,操作在我这个缓存组件中每一个缓存组件。
04:09
有自己唯一一个名字,所以说呢,我们这一块指定的是指定缓存组件的名字,哎,我们来指定它的名字,这个呢就类似于我们这张图,我们来说一下我们这个应用程序,我们来交互数据库,哎,我们中间呢引入一个缓存层。来我们这个catch manager呢,是来管理很多的缓存的,比如呢,有缓存员工的数据的地方,有缓存部门的这个组件,有专门来做工资缓存的这些组件,那我们来管理这些缓存呢,每一个缓存都有一个名字,比如呢,我们要把员工保存在员工的缓存里边,那我们自然就要指定我们这个缓存的名字,我们存在EP中,而不是指定DPD中,这就是呢,我们第一个指定我们这个缓存的名字,接下来第二个呢,我们来看。
05:04
核心的一个属性叫K,这个呢叫缓存数据的,缓存数据用的K。使用啊,咱们这个K,因为我们知道要缓存数据,我们是按照KY6的方式,比如一号张三,二号李四,这是一些员工信息,那么这个K要怎么用,K的值是什么?我们可以用它来指定,来可以用它来指定。当然如果不指定默认呢,默认是啊,使用咱们这个方法参数的值,比如我们这个方法参数,我们传了一个一,那么这个K呢,就用的是一个一,那么值呢,就是方法的返回值。把这个间值对相当于缓存起来,而且呢,这块K我们也可以来写一个来编写,哎,我们使用e spel表达式来写,比如呢,我们来写上它,好,我们第一个catch names,我们来指定咱们这个缓存的名字。
06:13
它什么名字呢?我们员工,我们都存在这个员工缓存里边,然后呢,用的K用的K,用的K呢,我们还可以写这个表达式,比如我写一个井号ID,井号ID的意思就是取出参数ID的值,把这个值作为K,那么能编写spell表达式,能写哪些呢?那这个PPT里边,哎,我给大家也列出来了。这表达式呢,有这么些对象能用,诶,比如方法的名字,我们可以使用井块root也要从root开始,点满的name,我们可以取出方法的名字,也可以知道直接拿到这个方法对象root.method我们点一下它的name,也是拿到方法的名字,包括呢,Target,我们被调用的目标对象,以及目标对象的这个类,包括呢,我们这个参数列表我们也能拿到使用井号ROX0,相当于是呢,我的这种写法,井号ID就等于井号RO,哎,从根元素开始取,取出它的这个X0,哎,第一个参数也是这个ID的值,拿它作为K,包括呢,我们还可以写什么呢?那还可以写咱们这个缓存的名字,比如我们这个缓存,诶,我们要获取这个缓存的名字emp,那么我们就可以写景。
07:35
好,Root catch,哎零,这个CATCH0呢,因为我们可可以指定多个缓存,说把我们这个数据不仅来缓存在emp中来,我们使用数组的方式把这个数据呢,我们还可以缓存在一个临时的keep中,也就是说我们可以指定多个缓存名字都行,好,那么我们这个K呢,我们就不写了,而K能写的这个SPL表达式有这么多,还有咱们这个参数名,哎,我用的就是这种井号,直接写参数名,或者井号A0P0也代表的是我们这个参数,哎,比如呢,我们来举上几个例子,井号ID是参数ID的值。
08:16
包括呢,它等同于我们写一个井号A0,或者呢井号P0,或者呢,我们等同于井号not来取出二个四,哎,取出所有参数的,哎,第一个参数,哎就说呢,这是我们K能写的值,好,我们先不写,看一下默认是不是参数的值,这叫缓存的名字。和缓存要用的这个键,接下来呢,我们这个catch里边还有一个属性,哎往下翻,哎还有叫key genator,叫逐渐的咱们这个K的咱们这个生成器。也就是说呢,默认用咱们这个参数的值来作为缓存的K,它是用一个生成器来生成的,当然我们也可以可以自己指定咱们这个咱们K的生成器。
09:11
的生成器的组件ID,就是说呢,我们写一个k generate,我们放在容器中,那们可以在这儿来指定我们这个k generator是什么?当然K跟k generator二选一,就是说呢,你指定了K,哎,就。不要再指定K站的了,已经没用了,就是呢,二选一。二选一使用好,那么还有一个重要的内容,Catch里边,诶包括呢,我们也能指定这个catch manager叫缓存管理器,指定缓存管理器,到底从哪个缓存管理器里边拿到这个缓存,哎,比如我们说啊还是这张图,我们这个缓存管理器里边呢,我们保存了非常多的缓存组件,有一个呢叫emp,叫员工,然后呢,他把这些一号张三是保存在我们这个康克润的哈希曼里边的,我们还有额外的另外一个缓存管理器,假设呢,它也有一个缓存,诶它也叫EP,只不过呢,它是把员工信息哎保存在red中的,然后每一个缓存管理器得到的缓存组件功能不一样,我们呢就可以来指定到底是用哪个缓缓存管理器,哎,我们可以在这指定,包括呢缓存管理器和我们下边的这个缓存解析器。
10:34
其实都是一样的。或者呢,或者是我们指定缓存解析器解析器,这个缓存解析器呢,跟缓存管理器也是二选一用一个,诶这块都说清楚了,Catch manager或者catch reserve随便用一个,它们的作用都一样,Catch reserve呢是得到我们这个缓存集合的,而cash manager也是得到我们一个缓存的。
11:01
好,这样呢,我们接下来还有一个叫判断条件,诶,我们可以来指定条件。指定符合。符合条件的情况下否?符合符合条件的情况下才缓算,比如说呢,我们这一块还是能指定spel表达式,比如呢,我来写一个考,诶我写一个井号ID,井号ID呢代表取出参数ID的值,当参数的ID值大于零的时候,哎,ID大于零的时候,我才把这个方法运行的结果进行缓存,然后呢,这是我们这个肯定式,我们可以来指定条件,包括呢,还有下边我们这个叫unless,哎这个unless呢叫除非,哎除非呢就是来否定缓存,否定缓存,比如呢,当unless指定的条件on unless指定的条件。
12:05
啊,为处。为出。我们这个方法的返回值就不会被缓存,就是呢,这个unless跟condition其实是相反的,Condition是condition条件为true才缓存,而unless是条件为true就不缓存,Unless叫除非也就是说本来我是要缓存的,除非满足你这个条件我就不缓存了,就说呢这叫unless,包括呢,Unless在用的时候呢,我们可以哎。获取到结果进行判断。比如举一个例子,我用了condition,我还用了unless,我来指定,哎,结果怎么获取呢?我们这个表达式里边,我们来看我们这个PPT表达式里边呢,说我们也可以用号result能出结果的值,那我就写一个号result,如果result等等那。
13:01
那如果我的返回的结果是空,那就不缓存了,然后呢,我们也可以这样来指定来写一个例子,先放这那一会儿呢,每一个我们都来进行一测试,这是unless,来看一下还有没有其他属性,哎,还有一个叫异步,我们这个缓存呢,是否使用异步模式。是否使用异步模式?好,那我们现在呢,就不写这么多,我们写一个最简单的叫,我们就指定一个缓存名字,我们把它保存在ERP这个里边,好这个condition呢,我们也先不写,我们放在那一会呢,我们挨个进行测试,好这个呢,我们就写好了,我来重启一下我们这个应用。然后呢,我们来发送请求测试一下,看我们这个缓存能不能起作用呢。好。我们来发送EP,二来我们查询二号员工,我来刷新来我们发现呢,这个方法掉了,这是第一次掉,我们来查询二号员工发了SQ语句,我这个控制台清空,我呢下次还是查询二号员工来刷新,来看控制台,诶控制台没有任何打印,说明我们这个方法都没进来,查询员工没有打印SQ语句没有打印,也就是说我们以后每次来查询二号员工,我来刷新刷新刷新控制台呢,都没有打印,方法都不会进来,说明我们缓存起效果了,但是如果说我们要一号员工,因为一号员工这个结果从来没被人缓存过来回车。
14:39
哎,我们发现一号员工查询是要查数据库的,好查完以后呢,我以后再有一号员工我来刷新刷新,哎,就不用再查了,我要二号员工呢来看,诶二号员工因为以前已经缓存过了,所以说我刷新刷新刷新不用再查了,你这个缓存呢就起作用了,这是我们说的第一个叫catch able注解来。
我来说两句