springboot redis做缓存

2022-06-21 08:28:34

一、配置好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值空间下的所有缓存数据

  • 作者:OCEAN__
  • 原文链接:https://blog.csdn.net/oceanyang520/article/details/124311548
    更新时间:2022-06-21 08:28:34