【SpringBoot】SpringCache轻松启用Redis缓存

2024-07-16 1668阅读

目录:

1.前言

2.常用注解

3.启用缓存

1.前言

Spring Cache是Spring提供的一种缓存抽象机制,旨在通过简化缓存操作来提高系统性能和响应速度。Spring Cache可以将方法的返回值缓存起来,当下次调用方法时如果从缓存中查询到了数据,可以直接从缓存中获取结果,而无需再次执行方法体中的代码。

2.常用注解

  • @Cacheable:在方法执行前查看是否有缓存对应的数据,如果有直接返回数据,如果没有调用方法获取数据返回,并缓存起来;
  • @CacheEvict:将一条或多条数据从缓存中删除;
  • @CachePut:将方法的返回值放到缓存中;
  • @EnableCaching:开启缓存注解功能;
  • @Caching:组合多个缓存注解。

    3.启用缓存

    3.1.配置yaml文件

    spring:  
      cache:  
        type: simple  
        simple:  
          time-to-live: 600s
    

    3.2.添加注解

    在启动类上添加注解@EnableCaching:

    @Slf4j
    @SpringBootApplication
    @EnableCaching
    public class SpringBootstrap {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootstrap.class, args);
        }
    }
    

    3.3.创建缓存

    使用@CachePut注解。当方法执行完后,如果缓存不存在则创建缓存;如果缓存存在则更新缓存。

    注解中的value属性可指定缓存的名称,key属性则可指定缓存的键,可使用SpEL表达式来获取key的值。

    这里result表示方法的返回值UserInfo,从UserInfo中获取id属性。

    @CachePut(value = "user", key = "#result.id")
    public UserInfo create(UserCreateRequest request) {
        // 将请求中的数据映射给实体类(相关方法自行创建)
        User user = UserConverter.createByRequest(request);
        boolean save = userService.save(user);
        if (save) {
            return UserConverter.toInfo(user);
        } else {
            throw new RuntimeException("User.create.fail");
        }
    }
    

    3.4.更新缓存

    同样使用@CachePut注解。当方法执行完后,如果缓存不存在则创建缓存;如果缓存存在则更新缓存。

    @CachePut(value = "user", key = "#result.id")
    public UserInfo update(UserUpdateRequest request) {
        // 将请求中的数据映映射给wrapper(相关方法自行创建)
        Wrapper wrapper = UserConverter.updateWrapperByRequest(request);
        boolean update = userService.update(wrapper);
        if (update) {
            return UserConverter.toInfo(user);
        } else {
            throw new RuntimeException("User.update.fail");
        }
    }
    

    3.5.查询缓存

    使用@Cacheable注解。在方法执行前,首先会查询缓存,如果缓存不存在,则根据方法的返回结果创建缓存;如果缓存存在,则直接返回数据,不执行方法。

    这里使用request表示方法的参数UserQueryRequest。

    @Cacheable(value = "user", key = "#request.id")
    public UserInfo query(UserQueryRequest request) {
        User user = userService.getById(request.getId());
        if (Objects.isNull(user)) {
            throw new RuntimeException("User.not.exist");
        }
        return c2cInterestCategory;
    }
    

    3.6.删除缓存

    使用@CacheEvict注解。当方法执行完后,会根据key删除对应的缓存。

    这里可以使用condition属性,当返回结果为true(删除成功)后,才去删除缓存。

    @CacheEvict(value = "user", key = "#request.id", condition = "#result.equals(true)")
    public Boolean delete(UserDeleteRequest request) {
        return userService.removeById(request.getId());
    }
    

    3.7.多重操作

    使用@Caching注解,通过使用不同的属性进行相应操作。

    【SpringBoot】SpringCache轻松启用Redis缓存

    创建/更新多个缓存:

    @Caching(
                put = {
                        @CachePut(value = "userById", key = "#result.id"),
                        @CachePut(value = "userByPhone", key = "#request.phone")
                }
        )
    

    删除多个缓存:

    @Caching(
                evict = {
                        @CacheEvict(value = "userById", key = "#result.id"),
                        @CacheEvict(value = "userByPhone", key = "#request.phone")
                }
        )
    
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]