Springboot的@Cacheable注解

概述

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

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

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

  1. value:设置缓存所属的缓存组件名称,必须指定至少一个。
  2. key:设置方法被调用时使用的缓存键,支持 SpEL 表达式。如果不指定,则会使用默认策略生成缓存键。
  3. condition:在执行方法之前,根据 SpEL 条件表达式判断是否需要缓存,默认为 true。
  4. 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 注解不仅能够为我们带来更简洁、易懂的代码,同时也带来了更好的可扩展性和灵活性,可以让我们更加专注于业务本身的逻辑实现。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
@Cacheable注解Spring框架中用于缓存方法返回结果的注解。当一个方法被@Cacheable注解标记后,Spring会检查缓存中是否存在该方法的返回值,如果存在,则直接从缓存中获取结果并返回;如果不存在,则执行方法体,并将返回值存入缓存中。 使用@Cacheable注解需要注意以下几点: 1. 在需要缓存结果的方法上使用@Cacheable注解。 2. 可以指定缓存的名称,通过value属性来指定,如:@Cacheable(value="myCache")。 3. 可以指定缓存的Key,通过key属性来指定,如:@Cacheable(key="#param")。其中#param表示方法的参数值,还可以使用SpEL表达式来动态构建key。 4. 默认情况下,缓存的Key是由方法的所有参数组成的,如果不希望使用所有参数构建Key,可以使用condition属性来限制条件,如:@Cacheable(condition="#param.length() < 10")。这里的condition表示只有当参数长度小于10时才进行缓存。 5. 可以指定缓存的过期时间,通过设置expire属性来指定,如:@Cacheable(expire=3600)。单位为秒,默认为-1,表示永不过期。 示例代码: ```java @Service public class UserService { @Cacheable(value = "users", key = "#id") public User getUserById(String id) { // 从数据库中获取用户信息 // ... return user; } } ``` 上述示例中,getUserById方法会根据id参数从缓存中获取User对象,如果缓存中不存在,则执行方法体并将返回值存入缓存。 需要注意的是,@Cacheable注解只能用于Spring容器管理的Bean中,即被@Service、@Component等注解标记的类中的方法才能被缓存。另外,为了使@Cacheable注解生效,需要在Spring配置文件中配置缓存管理器(如使用Ehcache、Redis等)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值