瑞吉外卖优化--使用Redis缓存技术和SpringCache
创始人
2024-06-02 01:47:23
0

整理记录下学习整个瑞吉外卖项目,详细代码可在我的Gitee仓库瑞吉外卖实战克隆下载学习使用!

1.缓存优化

1.1 环境搭建

1.1.1 码云或者GitHub新建仓库

登录码云后创建新仓库,如图
![[Pasted image 20230307155214.png]]

1.1.2 配置git

  • 选择git添加所有文件,如图
    ![[Pasted image 20230307155518.png]]
  • 同上操作点击commit Directory后输入提交信息,如图![[Pasted image 20230307155746.png]]
  • 将之间新建仓库后的远程地址复制到idea中,其中:
    • 远程地址![[Pasted image 20230307160019.png]]
    • 找到远程仓库管理,添加地址,如图

![[Pasted image 20230307160120.png]]
- 配置仓库,如图![[Pasted image 20230307160219.png]]

  • 输入密码账号后点击push即可,如图![[Pasted image 20230307160347.png]]
  • 刷新后可在新建码云仓库看到项目已经推送![[Pasted image 20230307160513.png]]
  • 选中本地master右键新建自己的分支,用于代码开发并push,如图![[Pasted image 20230307160650.png]]

1.1.3 配置代码环境

  • 配置redis,将依赖加入到POM文件中,如图
    ![[Pasted image 20230307161210.png]]
  • 配置application.yml文件,加入redis配置,如图
    ![[Pasted image 20230307163550.png]]
  • config包下,配置Redis配置,代码如下:
@Configuration  
public class RedisConfig extends CachingConfigurerSupport {  @Bean  public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {  RedisTemplate redisTemplate = new RedisTemplate<>();  //默认key序列化器为:JdkSerializationRedisSerializer  redisTemplate.setKeySerializer(new StringRedisSerializer());  redisTemplate.setConnectionFactory(connectionFactory);  return redisTemplate;  }  
}
  • 并进行提交push,如图![[Pasted image 20230307164315.png]]

1.2 缓存短信验证码

1.2.1 注入RedisTemplate对象

![[Pasted image 20230307164535.png]]

1.2.2 发送验证码controller中添加缓存代码

![[Pasted image 20230307164626.png]]

1.2.3 登录controller中使用Redis

![[Pasted image 20230307164804.png]]
![[Pasted image 20230307164939.png]]

1.3 缓存菜品数据

1.3.1 需求分析

![[Pasted image 20230307165715.png]]

1.3.2 解决办法

![[Pasted image 20230307165738.png]]

1.3.3 代码开发

  • 添加缓存
    ![[Pasted image 20230307170319.png]]
    ![[Pasted image 20230307170340.png]]
  • 清除缓存,在save方法和update方法均加入清楚缓存方法,如图
    ![[Pasted image 20230307171728.png]]
  • 提交到本地,如图![[Pasted image 20230307193352.png]]
  • 切换到主分支,并分支到主分支并推送,如图![[Pasted image 20230307194059.png]]

1.4 套餐其它功能

1.4.1 其它功能

包括套餐修改,及修改套餐状态功能

1.4.1 代码开发

controller层加入

//根据id找具体套餐信息  
@GetMapping("/dish/{id}")  
public Result> showSetmealDish(@PathVariable Long id) {  //条件构造器  LambdaQueryWrapper dishLambdaQueryWrapper = new LambdaQueryWrapper<>();  //手里的数据只有setmealId  dishLambdaQueryWrapper.eq(SetmealDish::getSetmealId, id);  //查询数据  List records = setmealDishService.list(dishLambdaQueryWrapper);  List dtoList = records.stream().map((item) -> {  DishDto dishDto = new DishDto();  //copy数据  BeanUtils.copyProperties(item, dishDto);  //查询对应菜品id  Long dishId = item.getDishId();  //根据菜品id获取具体菜品数据,这里要自动装配 dishServiceDish dish = dishService.getById(dishId);  //其实主要数据是要那个图片,不过我们这里多copy一点也没事  BeanUtils.copyProperties(dish, dishDto);  return dishDto;  }).collect(Collectors.toList());  return Result.success(dtoList);  
}  
//修改套餐状态,包括批量修改状态  
@PostMapping("/status/{status}")  
//设置allEntries为true,清空缓存名称为setmealCache的所有缓存  
//@CacheEvict(value = "setmealCache", allEntries = true)  
public Result status(@PathVariable String status, @RequestParam List ids) {  LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();  updateWrapper.in(Setmeal::getId, ids);  updateWrapper.set(Setmeal::getStatus, status);  setmealService.update(updateWrapper);  return Result.success("批量操作成功");  
}  
//修改时根据套餐id查找具体信息回显  
@GetMapping("/{id}")  
public Result getById(@PathVariable Long id) {  Setmeal setmeal = setmealService.getById(id);  SetmealDto setmealDto = new SetmealDto();  //拷贝数据  BeanUtils.copyProperties(setmeal, setmealDto);  //条件构造器  LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();  //根据setmealId查询具体的setmealDish  queryWrapper.eq(SetmealDish::getSetmealId, id);  List setmealDishes = setmealDishService.list(queryWrapper);  //然后再设置属性  setmealDto.setSetmealDishes(setmealDishes);  //作为结果返回  return Result.success(setmealDto);  
}  
//修改套餐中的菜品  
@PutMapping  
//设置allEntries为true,清空缓存名称为setmealCache的所有缓存  
//@CacheEvict(value = "setmealCache", allEntries = true)
public Result updateWithDish(@RequestBody SetmealDto setmealDto) {  List setmealDishes = setmealDto.getSetmealDishes();  Long setmealId = setmealDto.getId();  //先根据id把setmealDish表中对应套餐的数据删了  LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();  queryWrapper.eq(SetmealDish::getSetmealId, setmealId);  setmealDishService.remove(queryWrapper);  //然后在重新添加  setmealDishes = setmealDishes.stream().map((item) -> {  //这属性没有,需要我们手动设置一下  item.setSetmealId(setmealId);  return item;  }).collect(Collectors.toList());  //更新套餐数据  setmealService.updateById(setmealDto);  //更新套餐对应菜品数据  setmealDishService.saveBatch(setmealDishes);  return Result.success(setmealDto);  
}

1.4.3 测试

  • 测试修改状态,如图![[Pasted image 20230307220649.png]]
    改价格为60
    ![[Pasted image 20230307220709.png]]
    显示修改成功![[Pasted image 20230307220732.png]]
  • 停售功能结果和菜品类似,不再放图

1.5 缓存套餐数据

1.5.1 方法

使用SpringCache中的Redis缓存

1.5.2 步骤

![[Pasted image 20230307212254.png]]

1.5.3 具体步骤

  • 导入坐标,其中Spring Cache已导入,Redis上文已导入
  • 配置缓存过期时间,如图
    ![[Pasted image 20230307212746.png]]
  • 加入@EnableCaching注解,如图
    ![[Pasted image 20230307212842.png]]
  • 加入@Cacheable注解,如图
    ![[Pasted image 20230307213318.png]]
  • 加入@CacheEcict注解,如图
    ![[Pasted image 20230307214719.png]]
![[Pasted image 20230307214730.png]]

1.5.4 提交本地git

输入信息后提交本地git,如图
![[Pasted image 20230311150001.png]]

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...