Springboot的@Cacheable注解使用方法

 更新时间:2024年04月25日 10:30:56   作者:BIGSHU0923  
@Cacheable 是 Spring 框架提供的一种基于缓存的注解,它可以被应用在方法上以指示该方法的结果需要被缓存起来,缓存在哪个 Cache 中以及该方法使用何种缓存键,以下代码展示了如何使用 @Cacheable 注解,感兴趣的朋友跟随小编一起看看吧

概述

@Cacheable 是 Spring 框架提供的一种基于缓存的注解,它可以被应用在方法上以指示该方法的结果需要被缓存起来,缓存在哪个 Cache 中以及该方法使用何种缓存键。

使用 @Cacheable 注解后,每次调用该方法时,首先从缓存中检查是否有对应的缓存值。如果缓存中已有该值,则直接返回该缓存值;否则就执行该方法并将返回结果缓存起来以备下次使用。

@Cacheable 有以下几个常用属性:

  • value:设置缓存所属的缓存组件名称,必须指定至少一个。
  • key:设置方法被调用时使用的缓存键,支持 SpEL 表达式。如果不指定,则会使用默认策略生成缓存键。
  • condition:在执行方法之前,根据 SpEL 条件表达式判断是否需要缓存,默认为 true。
  • unless:在执行方法之后,根据 SpEL 条件表达式判断是否需要移除缓存,默认为 false。

使用

例如,以下代码展示了如何使用 @Cacheable 注解:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Cacheable(value = "userCache", key = "#id")
    @Override
    public User findById(Long id) {
        // 如果用户信息在缓存中存在,则直接返回
        // 否则调用底层获取数据的方法,并将获取到的数据添加到缓存中
        return userMapper.findById(id);
    }
}

上述代码表示,当调用 findById() 方法时,Spring 将首先从名为 userCache 的缓存中检索带有 #id 键的值。如果找到已缓存的值,则此方法不会执行。否则,将执行该方法,并将方法返回的结果缓存起来。

对比

用这个注解和我直接使用redisTemplate做缓存有什么区别吗?
@Cacheable 注解和直接使用 RedisTemplate 进行缓存操作最大的区别在于它们提供了不同级别的抽象层次。

使用 RedisTemplate 进行缓存操作需要手动写代码实现缓存的读取、添加、更新、删除等操作,通常需要对 Redis 调用进行封装并处理异常,这些都会增加代码量和复杂度。而 @Cacheable 注解则可以将这些细节全部封装起来,从而简化了开发人员的操作。

此外,通过 @Cacheable 注解所设置的缓存管理器还支持多种缓存类型,例如 Ehcache、Guava、Infinispan 等,并且可以轻松地切换缓存类型。

总之,使用 @Cacheable 注解不仅能够为我们带来更简洁、易懂的代码,同时也带来了更好的可扩展性和灵活性,可以让我们更加专注于业务本身的逻辑实现。

到此这篇关于Springboot的@Cacheable注解使用方法的文章就介绍到这了,更多相关Springboot @Cacheable注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 不使用第三方变量交换两个变量值的四种方法详解

    Java 不使用第三方变量交换两个变量值的四种方法详解

    这篇文章主要介绍了四种不使用第三方变量交换两个变量值的方法。文中对于四种方法进行了详细的分析,需要的小伙伴们可以跟随小编一起学习一下
    2021-12-12
  • java实现音频转文本的实现步骤

    java实现音频转文本的实现步骤

    本文主要介绍了java实现音频转文本的实现步骤,可以通过使用一些现成的库或者API来实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Servlet关于RequestDispatcher的原理详解

    Servlet关于RequestDispatcher的原理详解

    这篇文章主要介绍了Servlet关于RequestDispatcher的原理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • java使用链表来模拟栈的入栈出栈操作实例代码

    java使用链表来模拟栈的入栈出栈操作实例代码

    这篇文章主要介绍了java 使用链表来模拟栈的入栈出栈操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java序列化的原理分析及解决

    Java序列化的原理分析及解决

    文章介绍了Java中的序列化机制,包括Serializable和Externalizable接口的区别,以及serialVersionUID的作用,Serializable接口可以序列化的所有子类型本身都是可序列化的,如果要序列化的类有父类,父类也应该实现Serializable接口
    2024-11-11
  • Springboot中RedisTemplate设置String、Hash、List过期时间

    Springboot中RedisTemplate设置String、Hash、List过期时间

    本文主要介绍了Springboot中RedisTemplate设置String、Hash、List过期时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Spring Boot 项目搭建教程及注解

    Spring Boot 项目搭建教程及注解

    下面小编就为大家带来一篇Spring Boot 项目搭建教程及注解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java数据结构 递归之迷宫回溯案例讲解

    Java数据结构 递归之迷宫回溯案例讲解

    这篇文章主要介绍了Java数据结构递归之迷宫回溯案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Mybatis统计sql运行时间的两种方式

    Mybatis统计sql运行时间的两种方式

    这篇文章主要介绍了Mybatis统计sql运行时间的方案,Spring Boot + Mybatis web项目,统计sql运行时间,用于分析慢sql,优化系统速度,方案有两种:自定义实现 Interceptor和使用现有依赖库(Druid),文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-11-11
  • MyBatis Example And与Or混合使用的实例

    MyBatis Example And与Or混合使用的实例

    这篇文章主要介绍了MyBatis Example And与Or混合使用的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论