1.SpringCache介绍
2.SpringCache常用注解
底层是基于map实现的。缺点:重启后数据就不存在了
在Spring Cache使用方式中将底层实现替换成了redis缓存技术
1.@CachePut
/**
参考演示
* CachePut: 将方法的返回值放入缓存 多用于添加数据方法
* value:缓存的名称,每一个缓存名称下面可以有多个key
* (key要动态获取通过SPEL(#)的方式获取)
* key:缓存的key
* @param user
* @return
*/
@CachePut(value = "userCache",key = "#user.id")
@PostMapping
public User save(User user){
userService.save(user);
return user;
}
2.@CacheEvict
/**
参考演示
* CacheEvict:清理指定缓存
* value:缓存的名称,每一个缓存名称下面可以有多个key
* key:缓存的key
* @param id
*/
@CacheEvict(value = "userCache",key = "#id") //推荐
//@CacheEvict(value = "userCache",key = "#root.args[0]")
//@CacheEvict(value = "userCache",key = "#p0") 这三种方法效果一样
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id){
userService.removeById(id);
}
3. @Cacheable
/**
参考演示
* Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
* value:缓存的名称,每一个缓存名称下面可以有多个key
* key:缓存的key
* condition:条件,满足条件才缓存数据
*
* @param id
* @return
*/
@Cacheable(value = "userCache",key = "#id",condition = "#result != null ")
@GetMapping("/{id}")
public User getById(@PathVariable Long id){
User user = userService.getById(id);
return user;
}
3.SpringCache使用方式(redis缓存技术)开发中常用
condition:条件,满足条件才缓存数据。在redis缓存中无法使用#result(内置对象)
unless: 满足条件不缓存。可以使用
/**
案例演示
* Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
* value:缓存的名称,每一个缓存名称下面可以有多个key
* key:缓存的key
* condition:条件,满足条件才缓存数据
* unless: 满足条件不缓存
*
* @param id
* @return
*/
@Cacheable(value = "userCache",key = "#id",unless = "#result == null ")
@GetMapping("/{id}")
public User getById(@PathVariable Long id){
User user = userService.getById(id);
return user;
}
外加:allEntries = true
在删除新增redis数据的注解参数中加上allEntries参数设置成true可以将value名称中所有的缓存数据删除,系统默认的是false。