SpringCache注解的使用

1. @Cacheable
  • 用途:用于将方法的返回值存储到缓存中。如果缓存中已经存在对应的数据,则直接从缓存中获取,而不会执行方法。

  • 适用场景

    • 查询数据的方法(如数据库查询)。

    • 需要频繁调用但结果不经常变化的方法。

  • 常用位置

    • 放在只读方法上,例如服务层的 find get 方法。

  • 示例

    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    • 如果缓存中存在 users 缓存且键为 id 的值,则直接返回缓存内容,否则执行方法并将结果存入缓存。


2. @CachePut
  • 用途:无论缓存中是否存在对应的数据,都会执行方法,并将方法的返回值更新到缓存中。

  • 适用场景

    • 更新缓存数据时使用。

    • 数据需要动态更新并且保持缓存一致性。

  • 常用位置

    • 放在更新或保存数据的方法上。

  • 示例

    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        return userRepository.save(user);
    }
    • 方法会被执行,同时更新缓存中对应键的值。


3. @CacheEvict
  • 用途:用于清除缓存中的数据。

  • 适用场景

    • 删除或修改数据后,需要清理缓存以避免脏数据。

  • 常用位置

    • 放在删除或修改数据的方法上。

  • 参数

    • allEntries: 是否清除所有缓存,默认为 false

    • beforeInvocation: 是否在方法执行前清除缓存,默认为 false(即默认在方法执行后清除)。

  • 示例

    @CacheEvict(value = "users", key = "#id")
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
    • 删除用户的同时,清除缓存中对应的用户数据。


总结对比:

注解功能是否执行方法常见场景
@Cacheable缓存读取可能不执行查询数据
@CachePut缓存更新必须执行更新或保存数据
@CacheEvict缓存清除不执行删除或修改数据后清理缓存

通过合理使用这三个注解,可以有效管理缓存,提升系统性能并保证数据一致性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值