Spring缓存注解CachePut Cacheable CacheEvict 的含义

@Servcice
public class UserserviceImpl implements Userservice {
	@Autowired
	private UserDao userDao = null;

	//插入用户,最后 MyBatis 会回填 id,取结果 id 缓存用户
	@override
	@Transactional

        @CachePut(value ="redisCache", key ="'redie_user_'+#result.id")

	public User insertuser(User user) {
		userDao.insertuser(user);
		return user;
	}

	// 获取 id,取参数 id 缓存用户
	@override
	@Transactional
	@Cacheable(value ="redisCache", key ="'redis_user_'+#id")
	public User getuser(long id){
		return userDao.getuser(id);
	}

	//更新数据后,更新缓存,如果 condition 配置项使结果返回为 null,不缓存
	@Override
	@Transactional
	@CachePut (value ="redisCache",condition="#result !='null'", key ="'redis_user_'+#id")
	public User updateUserName(long id, String userName) {
		//此处调用 getuser 方法,该方法缓存注解失效,
		//所以这里还会执行 SQL,将查询到数据库最新数据
		User user =this getUser(id);
		if (user == null){
			return null;
		}
		user.setuserName(userName);
		userDao.updateUser(user);
		return user;
	}

	//命中率低,所以不采用缓存机制
	@Override
	@Transactional
	public List<user> findusers(String userName, String note){
		return userDao,findusers(userName, note)
	}

        //移除缓存
        @Override
        @Transactional
        @CacheEvict(value ="redisCache", key ="'redis_user_'+ id",
        beforeInvocation = false)
        public int deleteUser(long id){
	        return userDao.deleteUser(id);
        }

}

第一个,@CachePut 表示将方法结果返回存放到缓存中。

第二个,@Cacheable 表示先从缓存中通过定义的键查询,如果可以查询到数据,则返回,否则执行该方法,返回数据,并且将返回结果保存到缓存中。

第三个,@CacheEvict 通过定义的键移除缓存,它有一个Boolean类型的配置项beforeInvocation,表示在方法之前或者之后移出缓存。默认值为false,即为方法之后移出缓存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值