SpringCache之 @CachePut

使用CachePut注解,该方法每次都会执行,会清除对应的key值得缓存(或者更新),分为以下两种情况:

  1. 如果返回值null,下次进行该key值查询时,还会查一次数据库,此时相当于@CacheEvict注解;
  2. 如果返回值不为null,此时会进行该key值缓存的更新,更新缓存值为返回的数据;

分析:情况一返回值为null:

    //使用Redis缓存
    @Cacheable(value="Manager",key="#id")
    public User findById(Integer id) {
        System.out.println("---查数据库DB-----");
        return userMapper.selectByPrimaryKey(id);
    }

    @CachePut(value="Manager",key="#manager.getId()")
    //@CacheEvict(value="Manager",key="#manager.getId()")//清除数据
    public User update(User manager) {
        userMapper.updateByPrimaryKeySelective(manager);
        //return userMapper.selectByPrimaryKey(manager.getId());
        return null;
    }

情况二返回值不为null: 

  1. 先进行数据id为1的查询,发现下次查询id为1的数据不会再查询DB,直接走缓存;
  2. 此时进行id为1数据更新操作,并且返回值为null;
  3. 进行id为1的数据查询,发现此时id为1缓存不存在,进行DB查询;
    //使用Redis缓存
    @Cacheable(value="Manager",key="#id")
    public User findById(Integer id) {
        System.out.println("---查数据库DB-----");
        return userMapper.selectByPrimaryKey(id);
    }

    @CachePut(value="Manager",key="#manager.getId()")
    //@CacheEvict(value="Manager",key="#manager.getId()")//清除数据
    public User update(User manager) {
        userMapper.updateByPrimaryKeySelective(manager);
        return userMapper.selectByPrimaryKey(manager.getId());
        //return null;
    }
  1. 先进行数据id为1的查询,发现下次查询id为1的数据不会再查询DB,直接走缓存;
  2. 此时进行id为1数据更新操作,返回值不为null;
  3. 进行id为1的数据查询,发现此时id为1缓存被更新为更新的数据,且没有进行DB查询操作;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值