一、Spring Cache介绍
二、使用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,用来统一不同的缓存技术。
CacheManager是一个接口,默认为我们提供了5个实现类
(本次用的就是ConcurrentMapCacheManager来进行缓存的存储和删除)
三、Spring Cache的常用注解
四、用法:
(注意:在使用Catch的大前提就是,要存入到缓存中的对象的类(或对象的集合)必须让该类实现序列化接口(implements Serializable),没有实现序列化接口就会报错)
1、value属性是缓存类的名称,每一个缓存类下面可以有多个key
2、key属性才是真正的缓存数据的key
3、key中的值:
1.#result.属性 以返回结果的属性的值为key
2.#root.args[0].属性 以方法的第一个参数的属性值作为key
3.#方法的参数.属性 以方法的某个参数的属作为key
3、关于condition和unless都是@Cacheable注解的条件属性,两者有什么区别,以及为什么这里不能用 condition = "#result != null" 直接去看上一篇文章:Spring Cache的@Cacheable注解的condition属性与unless属性细节问题;Redis每日一坑在这里我就不过多解释了。
4、key的值也可以进行拼接,如下:用参数的id和名字中间加上下划线,key属性中支持这个语法
五、其实用Spring Cache + Redis用法和上面一样。无非就是多了几个准备步骤
1、引入spring-boot-starter-data-redis和spring-boot-starter-cache两个坐标
在只引入了spring-boot-starter-cache坐标时,我们再回过去ctrl + alt看一下这个CacheManager的实现类增多了。
在引入spring-boot-starter-data-redis坐标后,我们再回过去ctrl + alt看一下这个CacheManager的实现类又又 多了。其中主要扩展出来的就是这个RedisCacheManager实现类,也就是我们刚引入的redis的jar包中的,由IOC容器自动装配进来了
2、用application.yml文件对cache的相应配置
3、在启动类上加入@EnableCaching注解,开启缓存注解功能
4、在Controller的方法上加入@Cacheable(要将方法的返回结果数入Redis时,在方法的头上使用此注解)、@CacheEvict(要将Redis中已经存储好的数据删除时,在方法头上使用此注解)等注解