苍穹外卖day7 缓存商品(redis/Spring Cache)、用户端购物车功能

本文介绍了如何使用SpringCache和Redis缓存菜品数据,以提高系统性能。同时详细阐述了购物车管理,包括添加、查看、清空和删除商品的功能实现,以及如何通过注解进行缓存控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在用户端中,每次点击左侧分类都会展示一遍菜品数据,而每次都是通过查询数据库获取的,效率低下,所以通过redis来缓存数据。
Spring Cache实现了基于注解的缓存功能,通过在方法上添加相应的注解,就能够实现相关缓存操作。
添加购物车时,涉及到多个表的操作,可以单独添加菜品,也可以添加套餐,添加菜品的时候有些也需要添加菜品口味信息。


一、缓存菜品

1. 问题说明

用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大,系统响应慢、用户体验差。

2. 解决办法

通过Redis来缓存菜品数据,减少数据库查询操作。
在这里插入图片描述
缓存逻辑分析
每个分类下的菜品保存一份缓存数据
数据库中菜品数据有变更时清理缓存数据
在这里插入图片描述

3. 代码开发

1、修改用户端接口 DishController 的 list 方法,加入缓存处理逻辑

@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);//查询起售中的菜品
    //如果不存在,查询数据库
    list = dishService.listWithFlavor(dish);
    //将查询到的数据放入redis中
    redisTemplate.opsForValue().set(key,list);
    return Result.success(list);
}

2、修改管理端接口 DishController 的相关方法,加入清理缓存的逻辑,当数据发生变更要及时清理redis中的缓存数据,不然会造成数据不一致

  • 抽取清理缓存的方法
private void cleanCache(String pattern){
   
    Set keys = redisTemplate.keys(pattern);
    redisTemplate.delete(keys);
}
  • 新增菜品
public Result save(@RequestBody DishDTO dishDTO){
   
        log.info("新增菜品{}",dishDTO);
        dishService.saveWithFlavor(dishDTO);
        //清理缓存数据  新增菜品所属分类会受影响
        String key = "dish_"+dishDTO.getCategoryId();
        cleanCache(key);
        return Result.success();
}
  • 修改菜品
public Result update(@RequestBody DishDTO dishDTO){
   
        log.info("修改菜品 {}",dishDTO);
        dishService.updateWithFlavor(dishDTO);
        //如果是修改菜品所属分类,就会影响两个分类  统一清理所有缓存数据
        cleanCache("dish_*");
        return Result.success();
}
  • 批量删除菜品
public Result delete(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值