Springboot缓存注解

缓存介绍

Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org. Springframework. Cache. Cacheorg. Springframework. Cache. CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。
其使用方法和原理都类似于 Spring 对事务管理的支持。Spring Cache 是作用在方法上的,其核心思想是,当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存在缓存中。

@EnableCaching

@EnableCaching 注解是 spring framework 中的注解驱动的缓存管理功能。spring 版本在3.1加入了该注解。如果使用了这个注解,那么就无需在 XML 文件中配置 cache manager 。
@EnableCaching 是开启缓存功能,通常使用于缓存配置类上或者作用于 springboot 启动类上
在缓存配置类上

在 springboot 启动类上

@Cacheable

@Cacheable 注解就可以将运行结果缓存,以后查询相同的数据,直接从缓存中取,不需要调用方法。

@Cacheable(cacheNames = "cache")
    public List<User> findAll() {
        return userDao.findAll();
    }

第一次执行无缓存

第二次执行有缓存

序号参数解释
1cacheNames指定缓存组件的名字
2key缓存数据时使用的 key,默认使用方法参数
3keyGeneratorkey 的生成器。 Key 和 keyGenerator 二选一使用
4cacheManager可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。
5condition可以用来指定符合条件的情况下才缓存
6unless否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断
7sync是否使用异步模式。
@Cacheable (cacheNames = "findByName", key = " #name ")
@Override
public List<BookType> findByName (String name) {
    LambdaQueryWrapper<BookType> queryWrapper = new LambdaQueryWrapper<>();
    QueryWrapper.Like (BookType:: getName, name);
    List<BookType> bookTypes = bookTypeDao.SelectList (queryWrapper);
    Return bookTypes;
}

@CachePut

@CachePut 也可以声明一个方法支持缓存功能。与@Cacheable 不同的是使用@CachePut 标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

  @CachePut(cacheNames = "cache")
    public List<User> insert() {
        userDao.save(new User(null, "lx", "123", "13567338701", "lx", "admin", LocalDateTime.now(), null, 1L));
        return userDao.findAll();
    }

第一次执行

第二次执行

@CacheEvict

@CacheEvict 是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

@CacheEvict(cacheNames = "cache", allEntries = true)
    public void delete(Long id) {
        userDao.deleteById(id);
    }

首先加载缓存

确认缓存已存在

执行删除

再次查询

可以看到又执行了一次 sql

两个参数
  • allEntries allEntries 是 boolean 类型,表示是否需要清除缓存中的所有元素。默认为 false,表示不需要。当指定了 allEntries 为 true 时,Spring Cache 将忽略指定的 key。有的时候我们需要 Cache 一下清除所有的元素,这比一个一个清除元素更有效率。
  • beforeInvocation 使用 beforeInvocation 可以改变触发清除操作的时间,当我们指定该属性值为 true 时,Spring 会在调用该方法之前清除缓存中的指定元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值