springboot缓存的快速上手使用

1.依赖

   <!--springBoot 缓存-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

2.启功类加注解

@EnableCaching

3.简单使用方式

3 .1方法有参数用SpEL表达式获取

@Cacheable 缓存数据

  • cacheNames/value:指定缓存组件的名字,数组形式
  • key:缓存数据使用的key,确定缓存可以用唯一key进行指定;eg:编写SpEL; #id,参数id的值 ,,#a0(第一个参数), #p0(和a0的一样的意义) ,#root.args[0]
  • keyGenerator:key的生成器;可以自己指定key的生成器的组件id(注意: key/keyGenerator:二选一使用;不能同时使用)
  • cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器
  • condition:指定符合条件的情况下才缓存;使用SpEl表达式,eg:condition = “#a0>1”:第一个参数的值>1的时候才进行缓存
  • unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;eg:unless = “#a0!=2”:如果第一个参数的值不是2,结果不缓存;
  • sync:是否使用异步模式
    @Cacheable(value = "tree",key = "#id")
    public List<Tree> getDateById(Integer id) {
        System.out.println("查db");
        List<Tree>    trees = baseMapper.getTreeList();
        return trees;
    }

注意
@Cacheable是基于Spring AOP代理类,内部方法调用是不走代理的,@Cacheable是不起作用的
加@CacheEvict的方法可以在同一个类中进行调用,缓存会进行清空

如果方法内部调用需要使用spring容器中的bean来调用,
方法1:将缓存的方法单独放一个类里,与调用的方法分开,不放在同一个类里。避免同一个类调用
方法2:使用autowired获取当前类的bean
在这里插入图片描述
调用
在这里插入图片描述

 @Cacheable(value = "basic",key = "'data'")
    public BranchBasic getAll() {
        System.out.println(">>查db");
        BranchBasic branchBasic = getById(orgId);
        return branchBasic;
    }

@CachePut 调用方法并将返回值更新缓存

@CachePut 与 @Cacheable 的属性基本相同
不同点:
@Cacheable:先查缓存,有缓存返回,无缓存查DB
@CachePut :先执行,然后将执行的结果缓存起来

    @CachePut(value = "branchBasic",key = "#branchBasic.orgId")
    public BranchBasic updateData(BranchBasic branchBasic) {
        updateById(branchBasic);
        System.out.println(">>修改成功");
        return branchBasic;
    }

@CacheEvict 清空缓存

key:指定要清除的数据
allEntries = true:指定清除这个缓存中所有的数据
beforeInvocation = false:默认代表缓存清除操作是在方法执行之后执行
beforeInvocation = true:代表清除缓存操作是在方法运行之前执行

 @CacheEvict(value = "branchBasic",key = "orgId")
    public void delData(int orgId) {
        System.out.println("清空此orgId缓存");
    }

3.2方法无参数的情况
给key取名称,加单引号

  @Cacheable(value = "branchBasic",key = "'allData'")
    public BranchBasic getDateById() {
        System.out.println(">>查db");
        BranchBasic branchBasic = getById(orgId);
        return branchBasic;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值