@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,即为方法之后移出缓存。