Spring Cache
使用Spring Cache中封装的api可以直接使用注解,方便操作缓存数据。
需要在启动类上加入
@EnableCaching
//开启Spring Cache注解方式的缓存功能
- 依赖引入
<!--使用redis服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Spring Cache-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
注解:
- 查询
如果方法的返回值是自定义的返回类,需要在返回类中实现
Serializable
接口,这样保存到redis时才能进行序列化,不然无法保存。
/**
* 查询对应分类套餐
* @param setmeal
* @Cacheable 当缓存中存在时,直接返回,不运行查询语句
* @return
*/
@GetMapping("/list")
@Cacheable(value = "setmealCache",key = "#setmeal.categoryId + '_' + #setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal){
//构造查询条件
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(setmeal.getCategoryId() != null,Setmeal::getCategoryId,setmeal.getCategoryId());
//添加查询条件
queryWrapper.eq(Setmeal::getStatus,1);
//添加排序条件
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
List<Setmeal> list = setmealService.list(queryWrapper);
return R.success(list);
}
- 删除
- value = “setmealCache” 分类
allEntries = true : 删除分类下的所有缓存数据
/**
* 删除、批量菜品
* @param ids
* @CacheEvict 删除这一类的全部缓存
*/
@DeleteMapping
@CacheEvict(value = "setmealCache",allEntries = true)
public R<String> delete(@RequestParam List<Long> ids){
for (Long id:ids){
Setmeal setmeal = setmealService.getById(id);
if (setmeal.getStatus() == 1){
return R.error("未停售套餐不能删除");
}
}
setmealService.deleteWithdish(ids);
return R.success("套餐删除成功");
}
- 新增
/**
* 新增套餐
* @param setmealDto
* @CacheEvict 删除这一类的全部缓存
* @return
*/
@PostMapping
@CacheEvict(value = "setmealCache",allEntries = true)
public R<String> save(@RequestBody SetmealDto setmealDto){
setmealService.saveWithDish(setmealDto);
return R.success("新增套餐成功");
}