springboot学习11 (菜品缓存redis)

缓存逻辑分析

  • 目的:减轻数据库压力
  • 每个分类下的菜品保存一份缓存数据
  • 数据库中菜品数据有变更时清理缓存数据
    keyvalue
    dish_1string(...)
    dish_2string(...)
    dish_3string(...)
    @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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值