Redis相关配置:
1)第一步:在application.properties中配置缓存管理器:
其中:
spring.cache.type 缓存类型
spring.cache.chache-names 缓存名称,多个名称可以使用逗号分隔
2)第二步 :加入驱动缓存的注解@EnableCaching
3)第三步:Redis配置
操作记录:
1.添加数据
@CachePut注解将方法结果作为值返回存放在缓存中,其中键是key。
/**
* 测试@CachePut:表示将方法结果返回存放缓存中
* @param user
* @return
*/
@GetMapping("/user/insert")
@CachePut(value="redisCache",key="'redis_user_'+#result.id")
public User insert(User user){
user.setUsername("小芳");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("上海");
userXmlMapper.insertUser(user);
System.out.println("user.id---------"+user.getId());
return user;
}
#result代表返回结果对象,这里是一个User对象。#result.id是取出属性id,这里的id的值为38。value="redisCache",我们配置了对应的缓存的名称是redisCache,这样它就能引用到对应的缓存了。
2.查找数据
@Cacheable注解查询数据 :表示从缓存中通过定义的键查询,如果可以查询到数据,则返回,否则执行该方法,返回数据,并且将返回的结果保存到缓存中。
/**
* 获取用户的值
* @Cache表示先从缓存中同通过定义的键查询,如果可以查询到数据,就返回,否则执行该方法返回数据
* 并将结果保存到缓存中
* @param username
* @return
*/
@RequestMapping(path="/user/getUser")
@Cacheable(value="redisCache",key="'redis_user_'+#id")
public User getUser(int id){
System.out.println("执行了getUser....");
return userXmlMapper.getUser(id);
}
这里使用redis_user_和传入id值作为key。
3.更新数据:
/**
* 跟新数据
* @param username
* @return
* 更新语句,如果原先缓存中不存在
* #result!=null 如果返回Null,则方法返回之后不再操作缓存
* 如果返回的user为空,就不操作缓存
*/
@GetMapping(path="/user/updateUserName")
@CachePut(value="redisCache",condition = "#result!='null'",key="'redis_user_'+#id")
public User updateUserName(int id,String userName){
//????
User user = this.getUser(id);
if(user==null){
return null;
}
user.setUsername(userName);
userXmlMapper.updateUser(user);
return user;
}
1)这里的Condition = "#result!='null' ",如果返回null,则方法返回之后就不再操作缓存。
2)在updateUserName方法中调用getUser方法,此时并不存在读取缓存,因为AOP没有生效
4.自定义缓存管理器
1)Redis使用#{cacheName}:#{key}的形式作为健保存数据,如果我们想自定义前缀
2)设置超时时间
#禁用前缀
spring.cache.redis.use-key-prefix=false
#自定义前缀
spring.cache.redis.key-prefix=
#定义超时时间
spring.cache.redis.time-to-live=60000
相关的注解说明:
Spring缓存注解@CachePut , @CacheEvict,@CacheConfig使用 - 路途寻码人 - 博客园