一、Spring Cache介绍

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis

二、使用Spring Cache的Map存储(不使用Redis)

        1、当我们导入spring-boot-starter-web坐标时,里面的org.springframework:spring-webmvc下的spring-context包下的基础的API就足够去使用Spring Cache的基本操作。(也就是说,只要导入了spring-context上下文这个包,我们就能够去操作Spring-Cache的功能)

        2、在启动类上加上@EnableCaching注解,开启注解缓存支持

        3、在Controller中自动注入CacheManager,用来统一不同的缓存技术。

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis_02

        CacheManager是一个接口,默认为我们提供了5个实现类

      (本次用的就是ConcurrentMapCacheManager来进行缓存的存储和删除)

三、Spring Cache的常用注解

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis_03

四、用法:

(注意:在使用Catch的大前提就是,要存入到缓存中的对象的类(或对象的集合)必须让该类实现序列化接口(implements Serializable),没有实现序列化接口就会报错)

        1、value属性是缓存类的名称,每一个缓存类下面可以有多个key

        2、key属性才是真正的缓存数据的key

        3、key中的值:

                1.#result.属性   以返回结果的属性的值为key

                2.#root.args[0].属性  以方法的第一个参数的属性值作为key

                3.#方法的参数.属性   以方法的某个参数的属作为key

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis_04

         3、关于condition和unless都是@Cacheable注解的条件属性,两者有什么区别,以及为什么这里不能用  condition = "#result != null"  直接去看上一篇文章:Spring Cache的@Cacheable注解的condition属性与unless属性细节问题;Redis每日一坑在这里我就不过多解释了。

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis_05

 4、key的值也可以进行拼接,如下:用参数的id和名字中间加上下划线,key属性中支持这个语法

Spring画面关掉redis内存没有释放 spring redis缓存注解_缓存_06

 五、其实用Spring Cache + Redis用法和上面一样。无非就是多了几个准备步骤

        1、引入spring-boot-starter-data-redis和spring-boot-starter-cache两个坐标

Spring画面关掉redis内存没有释放 spring redis缓存注解_redis_07

        在只引入了spring-boot-starter-cache坐标时,我们再回过去ctrl + alt看一下这个CacheManager的实现类增多了。

Spring画面关掉redis内存没有释放 spring redis缓存注解_redis_08

        在引入spring-boot-starter-data-redis坐标后,我们再回过去ctrl + alt看一下这个CacheManager的实现类又又 多了。其中主要扩展出来的就是这个RedisCacheManager实现类,也就是我们刚引入的redis的jar包中的,由IOC容器自动装配进来了 

 

Spring画面关掉redis内存没有释放 spring redis缓存注解_spring_09

        2、用application.yml文件对cache的相应配置

Spring画面关掉redis内存没有释放 spring redis缓存注解_Redis_10

        3、在启动类上加入@EnableCaching注解,开启缓存注解功能

        4、在Controller的方法上加入@Cacheable(要将方法的返回结果数入Redis时,在方法的头上使用此注解)、@CacheEvict(要将Redis中已经存储好的数据删除时,在方法头上使用此注解)等注解