问题:不是所有的数据都需要请求后端的
- 不是所有的数据都需要请求后端的,有些数据是
重复的、可以复用的
解决方案:缓存
实现思路:每一个分类为一个key,一个可以下面可以有很多菜品
- 前端是按照分类查询的,所以我们需要通过分类来缓存
缓存代码
/*** 根据分类id查询菜品** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<DishVO>> list(Long categoryId) {// 查询redis缓存String key = "dish_" + categoryId;// 如果缓存中有数据,直接返回List<DishVO> list= (List<DishVO>) redisTemplate.opsForValue().get(key);if(ObjectUtil.isNotEmpty(list)){return Result.success(list);}// 如果缓存中没有数据,查询数据库,然后将数据存入缓存Dish dish = new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品list = dishService.listWithFlavor(dish);redisTemplate.opsForValue().set(key, list);return Result.success(list);}
清除缓存
当数据发生变化的时候,需要将历史缓存清除掉,
防止不一致
package com.sky.controller.admin;import java.util.List;
import java.util.Set;@RestController
@RequestMapping("/admin/dish")
@Api(tags = "菜品相关接口")
@Slf4j
public class DishController {private DishService dishService;private RedisTemplate redisTemplate;@Autowiredpublic DishController(DishService dishService, RedisTemplate redisTemplate) {