当前位置: 首页 > news >正文

苍穹外卖--04--Redis 缓存菜品信息、购物车

Redis 缓存菜品信息

用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。
在这里插入图片描述
通过 Redis 来缓存菜品数据,减少数据库查询操作。
在这里插入图片描述
缓存逻辑分析:

  • 每个分类下的菜品保存一份缓存数据
  • 数据库中菜品数据有变更时清理缓存数据

具体编码

修改用户端接口 DishController 的 list 方法(该方法负责根据分类 id,查询该分类下的所有菜品),加入缓存处理逻辑:

@Autowiredprivate RedisTemplate redisTemplate;/*** 根据分类 id 查询菜品** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类 id 查询菜品")public Result<List<DishVO>> list(Long categoryId) {//构造 redis 中的key,规则:dish_分类 idString 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);}

为了保证数据库Redis中的数据保持一致,修改管理端接口 DishController 的相关方法,加入清理缓存逻辑。

所有对增删改的方法都需要改造:

  • 新增菜品
  • 修改菜品
  • 批量删除菜品
  • 起售、停售菜品

在管理端 DishController 中修改代码:

新增菜品功能–增加删除缓存

	/*** 新增菜品** @param dishDTO* @return*/@PostMapping@ApiOperation("新增菜品")public Result save(@RequestBody DishDTO dishDTO) {log.info("新增菜品:{}", dishDTO);dishService.saveWithFlavor(dishDTO);//清理缓存数据String key = "dish_" + dishDTO.getCategoryId();cleanCache(key);return Result.success();}

2). 菜品批量删除功能–增加删除缓存

	/*** 菜品批量删除** @param ids* @return*/@DeleteMapping@ApiOperation("菜品批量删除")public Result delete(@RequestParam List<Long> ids) {log.info("菜品批量删除:{}", ids);dishService.deleteBatch(ids);//将所有的菜品缓存数据清理掉,所有以dish_开头的keycleanCache("dish_*");return Result.success();}

其它不一一列举

Spring Cache

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis(当前所用)

在这里插入图片描述

CachePut

@PostMapping
@CachePut(value = "userCache", key = "#user.id")
public User save(@RequestBody User user){userMapper.insert(user);return user;
}

数据内容为:

user.id = 1;
user.name = "Alice";

那么,Spring 层面认为的缓存:

缓存名称(value)​​:userCache
这是逻辑上的缓存分区名称,Spring 会用它区分不同的缓存组。
​​缓存键(key)​​:1(由 #user.idSpEL 表达式计算得出)
​​缓存值(value)​​:User对象({id=1, name="Alice"}

到 Redis 里真正存的内容是:

Redis Key: "userCache::1"
Redis Value: "{\"id\":1,\"name\":\"Alice\"}"  (序列化后的JSON)

缓存套餐

代码开发

实现步骤:

1). 导入 Spring Cache 和 Redis 相关 maven 坐标

2). 在启动类上加入 @EnableCaching 注解,开启缓存注解功能

3). 在用户端接口 SetmealController 的 list 方法上加入 @Cacheable 注解

4). 在管理端接口 SetmealController 的 save、delete、update、startOrStop 等方法上加入 CacheEvict 注解

3). 在用户端接口 SetmealController 的 list 方法上加入 @Cacheable 注解

	/*** 条件查询** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类 id 查询套餐")@Cacheable(cacheNames = "setmealCache",key = "#categoryId") //key: setmealCache::100public Result<List<Setmeal>> list(Long categoryId) {Setmeal setmeal = new Setmeal();setmeal.setCategoryId(categoryId);setmeal.setStatus(StatusConstant.ENABLE);List<Setmeal> list = setmealService.list(setmeal);return Result.success(list);}

添加购物车

需求分析

  • 用户可以将菜品或者套餐添加到购物车。
  • 对于菜品来说,如果设置了口味信息,则需要选择规格后才能加入购物车;
  • 对于套餐来说,可以直接点击将当前套餐加入购物车。

这个功能,简单来说,就是接收前端传来的信息,并存在表里即可,无需额外操作。

在这里插入图片描述

http://www.dtcms.com/a/490528.html

相关文章:

  • 大淘客网站如何做seowordpress o2o主题
  • 机器学习催化剂设计专题学习
  • (六)机器学习之图卷积网络
  • 告别刀耕火种:用 Makefile 自动化 C 语言项目编译
  • 【安卓开发】【Android】做一个简单的钢琴模拟器
  • C#控制反转
  • 【Java 开发日记】什么是线程池?它的工作原理?
  • 黄页网站数据来源wordpress 最新漏洞
  • 如何评价3D高斯泼溅(3DGS)技术为数字孪生与实时渲染带来的突破性进展?
  • 技术解析:如何将NX(UG)模型高效转换为3DXML格式
  • 阿里云智能建站网络类黄页
  • SAP MIR7 模拟过账没有这个按钮
  • Redis 分布式锁实战:解决马拉松报名并发冲突与 Lua 原子性优化
  • 光刻胶化学基础:聚合物分子量分布对分辨率的影响与控制,以及国内技术突破
  • Lua C API 中的注册表介绍
  • 广州做网站哪家公司最好wordpress html调用php
  • 神经网络之计算图
  • Hatch 故障排除指南
  • 神经网络之计算图分支节点
  • 【表格对比分析】Java集合体系、Java并发编程、JVM核心知识、Golang go-zero微服务框架
  • 【任务管理软件】实用工具之ToDoList 9.0.6 详细图文安装教程:高效任务管理的完美起点
  • Linux中zonelist分配策略初始化
  • hadoop的三副本数据冗余策略
  • 岳阳网站建设企业足球比赛直播app下载
  • React 三元运算符页面切换:完整进出流程
  • NumPy zeros_like() 函数详解
  • 网站建设要后台吗公司网页制作哪家好
  • 天津网站建设优化网页设计图片代码
  • CXR SDK实战指南:跨设备AR应用开发
  • 已知明文攻击(Known plaintext):原理、方法与防御体系深度剖析