缓存逻辑分析
- 目的:减轻数据库压力
- 每个分类下的菜品保存一份缓存数据
- 数据库中菜品数据有变更时清理缓存数据 
  key value dish_1 string(...) dish_2 string(...) dish_3 string(...) 
    @GetMapping("/list")
    @ApiOperation("根据分类id查询菜品")
    public Result<List<DishVO>> list(Long categoryId) {
        //构造redis中的key,dish分类id
        String key="dish_"+categoryId;
        //查询redis中是否存在菜品数据
        List<DishVO> list=(List<DishVO>) redisTemplate.opsForValue().get(key);
        if(list!=null&& list.size()>0){
            //如果存在直接返回,无需查询数据库
            return Result.success(list);
        }
        Dish dish = new Dish();
        dish.setCategoryId(categoryId);
        dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品
        //如果不存在,查询数据库并放入redis中
        list = dishService.listWithFlavor(dish);
        redisTemplate.opsForValue().set(key,list);
        return Result.success(list);
    }

存储成功
当前问题:如果价格等数据更新,缓存没用被清理,显示不变
清理缓存
当菜品状态或添加删除菜品,需要清理缓存
        //将所有菜品缓存数据清理掉,所有以dish_开头的key
        Set keys= redisTemplate.keys("dish_*");
        redisTemplate.delete(keys);        //清理缓存数据
        String key="dish_"+dishDTO.getCategoryId();
        redisTemplate.delete(key);






![[oeasy]python0032_ 火星文字幕_os_操作系统的作用_time_sleep_延迟](https://img-blog.csdnimg.cn/img_convert/6b040fa18739e813c0f48fbf184af53a.png)











