在抽象类中我们进行了RedisTemplate的初始化以及序列化:
public abstract class AbstractBaseRedisDao<K, V> { @Resource(name = "redisTemplate") protected RedisTemplate<K, V> redisTemplate; /** * 设置redisTemplate * * @param redisTemplate */ public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) { this.redisTemplate = redisTemplate; } /** * 获取 RedisSerializer */ protected RedisSerializer<String> getRedisSerializer() { return redisTemplate.getStringSerializer(); } }在实现类中我们通过操作RestTemplate来实现接口中的方法~
Redis缓存实战首先,我们如果想在Spring Boot项目中启用缓存,需要在启动类上加上注解@EnableCaching,这个是重点,要记住了!
首先介绍一下注解三剑客:@Cacheable,@CachePut,@CacheEvict。
@Cacheable:主要针对方法配置,能够根据方法的请求参数对其进行缓存,常用于查询操作
@CachePut:主要针对方法配置,能够根据方法的请求参数对其进行缓存,常用于修改操作
@CacheEvict:清空缓存,主要用于删除操作。
下面我们来看一下用法:
/** * value: 缓存的名称 * key: 缓存的键 * return 缓存的值 */ @Override @Cacheable(value = "users", key = "#id") public UserDO findOne(Long id) { // 如果我们第二次访问的时候,控制台没有打印出这句话说明是从缓存中取出 log.info("From MYSQL"); return userMapper.get(id); } @Override @CachePut(value = "users", key = "#userDO.id") public UserDO update(UserDO userDO) { // 执行之后,再次访问findOne的时候,应当没有打印出“From MySQL”,且返回的是我们修改后的值,说明这一步缓存成功 if (userMapper.update(userDO) > 0) { return userMapper.get(userDO.getId()); } return null; } @Override @CacheEvict(value = "users", key = "#id") public int delete(Long id) { // 执行之后去rdm中查看即可 return userMapper.delete(id); } 测试1第一次访问findOne
第二次访问findOne:
仍然是刚刚的结果,但是控制台没有打印出任何东西,说明缓存成功
测试2调用update后再次调用findOne:
可以看出信息已被修改且未访问数据库 测试3
访问delete,查看rdm:
说明删除成功~
原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
源码地址Github
Gitee
记得顺手点个star,您的肯定是对我写作最大的动力!