springboot redis做缓存
一、配置好redis,不做赘述,只需要连接成功就好,有复杂需求请自行搜索redis 缓存相关策略配置二、springboot pom引入cache<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache--><dependency><groupId
一、配置好redis,不做赘述,只需要连接成功就好,有复杂需求请自行搜索redis 缓存相关策略配置
二、springboot pom引入cache
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> <version>2.6.6</version> </dependency> 三、springboot启动类上加上@EnableCaching注解
@EnableCaching public class Application{ } 四、配置文件指定redis为缓存管理器,例如在 application.properties application.yml里 spring.cache.type=redis spring cache: type: redis
五、开始使用了,大体有这几个注解
@Cacheable(value="userList")
这个用的最多,简单粗暴,这个注解在执行前先查看缓存中是不是已经存在了,如果存在,直接返回。如果不存在,将方法的返回值放入缓存
@CachePut
这个注解直接将返回值放入缓存中,通常用于保存和修改方法中
@CacheEvict(value = "jobList",beforeInvocation = true)
缓存也是需要更新的,所以,这个是缓存删除注解,用来删除可能存在过时的数据,一般的放在删除方法上
看图更直观:
关于@CacheEvict多说两句:
在spring cache中,@CacheEvict是清除缓存的注解。其中注解参数可以只有value,key意思是清除在value值空间中的key值数据,此时默认在当前注解方法成功执行之后再清除。这时候就会存在一个问题,也许你的注解方法成功执行了删除操作,但是后续代码抛出异常导致未能清除缓存,下次查询时依旧从缓存中去读取,这时查询到的结果值是删除操作之前的值。
有一个简单的解决办法,在注解参数里面加上beforeInvocation为true,意思是说当执行这个方法之前执行清除缓存的操作,这样不管这个方法执行成功与否,该缓存都将不存在。
当注解参数加上allEntries为true时,意思是说这个清除缓存是清除当前value值空间下的所有缓存数据
更多推荐
所有评论(0)