1、什么是SpringCache
Spring提供的缓存框架可以提供基于注解的缓存功能,底层可以切换不同的缓存技术:EHCache、Caffeine、Redis
依赖
<dependency>
<grouppId>org.springframework.boot</grouppId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
还要添加使用的缓存技术依赖
2、常用注解使用
@EnableCaching | 添加在类上方,该类中的方法可以使用注解缓存功能 |
@CachePut | 添加在方法上方,将方法的返回值存入缓存 |
@Cacheable | 添加在方法上方,执行方法之前先查看缓存中是否存在数据,如果存在则直接返回数据,如果没有则执行方法并将方法返回值存入缓存 |
@CacheEvict | 将1/n条数据从缓存中删除 |
3、注解使用详解
1.@Cacheable
@Cacheable( value = "" , key ="")
value是设置前缀,通过前缀和key去缓存中查找是否存在对应的数据,如果存在则直接返回数据。如果不存在则执行方法,并将方法的返回值缓存
@Cacheable ( value = "" , key = "" , unless = "" , condition = "")
unless : 设置条件,条件不成立则存入缓存,条件成立则不存入缓存(推荐,可以通过#result 使用方法的返回值)
condition:设置条件,条件成立则存入缓存,条件不成立则不存入
2.@CachePut ( name = "" , cacheNames= "" , key = "")
缓存中的结构 ----> 前缀 : : key = value ,value和cacheNames都是设置前缀
key = " #result.id " 表示取方法返回值的id属性作为key,缓存中的值就是属性id的值
key = " #形参名.id" 表示取方法形参的第一个参数的id属性作为key
3.CacheEvict
@CacheEvict ( value = "" , key = "") : 根据前缀和key删除缓存
@CacheEvict (value = "" , allEntries = true): 删除所有符合设置前缀的缓存数据
4.和Redis有什么区别呢?
缺点:缺少灵活性,如无法设置过期时间
优点:对代码没有侵入