SpringCache轻松启用Redis缓存的全过程

 更新时间:2024年07月17日 10:03:03   作者:MoCrane  
Spring Cache是Spring提供的一种缓存抽象机制,旨在通过简化缓存操作来提高系统性能和响应速度,本文将给大家详细介绍SpringCache如何轻松启用Redis缓存,文中有详细的代码示例供大家参考,需要的朋友可以参考下

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<User> 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注解,通过使用不同的属性进行相应操作。

创建/更新多个缓存:

@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")
            }
    )

到此这篇关于SpringCache轻松启用Redis缓存的全过程的文章就介绍到这了,更多相关SpringCache启用Redis缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java ServletContext与ServletConfig接口使用教程

    Java ServletContext与ServletConfig接口使用教程

    ServletConfig对象,叫Servlet配置对象。主要用于加载配置文件的初始化参数。我们知道一个Web应用里面可以有多个servlet,如果现在有一份数据需要传给所有的servlet使用,那么我们就可以使用ServletContext对象了
    2022-09-09
  • mybatis批量更新与插入方式

    mybatis批量更新与插入方式

    这篇文章主要介绍了mybatis批量更新与插入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java之swing单选框用法实例分析

    java之swing单选框用法实例分析

    这篇文章主要介绍了java之swing单选框用法,以实例形式分析了swing图形界面单选框的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Mybatis配置之<environments>配置元素详解

    Mybatis配置之<environments>配置元素详解

    这篇文章主要介绍了Mybatis配置之<environments>配置元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解java Collections.sort的两种用法

    详解java Collections.sort的两种用法

    这篇文章主要介绍了详解java Collections.sort的两种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 一个MIDP俄罗斯方块游戏的设计和实现

    一个MIDP俄罗斯方块游戏的设计和实现

    一个MIDP俄罗斯方块游戏的设计和实现...
    2006-12-12
  • 如何实现java Iterator迭代器功能

    如何实现java Iterator迭代器功能

    这篇文章主要介绍了如何实现java Iterator迭代器功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java中控制流程语句的深入讲解

    Java中控制流程语句的深入讲解

    流程控制语句顾名思义就是控制程序走向的语句,其中包括条件语句,分支语句和循环语句,这篇文章主要给大家介绍了关于Java中控制流程语句的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Spring中事件发布机制及流程详解

    Spring中事件发布机制及流程详解

    这篇文章主要介绍了Spring中事件发布机制及流程详解,在分析源码的过程中,也是大量使用了事件机制,在我分析的这篇博客中,有不少地方都运用了事件发布机制,所以本文的目的是从SpringBoot中学习到事件的发布流程,需要的朋友可以参考下
    2023-11-11
  • Guava自动加载缓存LoadingCache使用实战详解

    Guava自动加载缓存LoadingCache使用实战详解

    这篇文章主要为大家介绍了Guava自动加载缓存LoadingCache使用实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论