@Cacheable和@CacheEvict的学习使用

spring框架提供了@Cacheable和@CacheEvict的注解用于增加缓存和清除缓存

Cacheable使用

这个注解是加在类方法上的,value接收的是返回值
Cache 接口下 Spring 提供了各种 xxxCache 的实现,比如:RedisCache、EhCache、ConcurrentMapCache。

缓存流程

把缓存注解加到方法上,第一次执行,会缓存到数据库上,当再次执行时,spring会检查这个方法是不是已经调用过了,如果已经调用就直接加载缓存返回。这里有个注意点,比如你缓存了用户数据,当你用户信息修改后,如果没有清空对应的缓存,那么调用此方法你的用户数据还是旧数据,大部分情况下需要组合使用。

缓存使用

1、在SpringApplication主启动类上加上启用缓存注解@EnableCaching
在这里插入图片描述
2、在你想要的方法上使用Cacheable注解

    @Cacheable(value = "user_info", key = "#openId")
    public User getByOpenId(String openId) {
    user = userRepo.findFirstByOpenId(openId);
    return user;
}
属性介绍
  • value:缓存的名字
  • key:缓存的key唯一标识
  • keyGenerator :key生成器
  • cacheManager :缓存管理器
  • condition :可以设置指定条件下才执行缓存操作
  • sync :异步模式

CacheEvict使用

属性

  • key:缓存的key,默认为空。缓存多了无法定位,所以最好还是加上且最好是唯一识别
  • value:缓存名称,不能为空(例如我要存一个User类,缓存名称设置为user_info,那么user_info就是一个复杂对象的值,里面有着User类的各个实例数据)
  • condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL表达式
  • allEntries:true表示清除value中的全部缓存,默认为false

SpEL是什么?就是类似value="#{user2.getUsername()}"这样用#{XX}就属于SpEL表达式。

清除某单一key缓存
    @CacheEvict(value = "user_info", key = "#openId")
    public User getByOpenId(String openId) {
    user = userRepo.findFirstByOpenId(openId);
    return user;
}

这里allEntries为默认的false,清除缓存就是单一缓存,需要提供对应的Key-value缓存

清除所有缓存
    @CacheEvict(value = "user_info",allEntries=true)
    public User getByOpenId(String openId) {
    user = userRepo.findFirstByOpenId(openId);
    return user;
}

这里就属于清除所有value是user_info的缓存,所以此时key你写不写都可以,写了也不会生效。

清除缓存总结

这里的key-value的常规理解不同,常规是根据key来执行删除,value值也是大部分都是各不相同的。在缓存中,key是各不相同,但是同一个业务场景中value的名字是一样的都是user_info。如果在Redis中我们存有user_info, article_info,他们根据openId、articleId作为key来找到对应的value。很多情况下,清除缓存不可能一个个根据openId去清除,用整体清除。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值