瑞吉外卖优化--使用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]]

相关内容

热门资讯

婚宴答谢宴简短主持词 婚宴答谢宴简短主持词  主持词要根据活动对象的不同去设置不同的主持词。在人们积极参与各种活动的今天,...
汽车公司庆典主持词 汽车公司庆典主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。现今社会在不断向前发...
古筝音乐会主持词 古筝音乐会主持词6篇  主持词要把握好吸引观众、导入主题、创设情境等环节以吸引观众。在一步步向前发展...
小学元旦联欢会主持词开场白和... 小学元旦联欢会主持词开场白和结束词  根据活动对象的不同,需要设置不同的主持词。随着社会一步步向前发...
知识竞赛主持词 知识竞赛主持词(精选6篇)  主持词的写作需要将主题贯穿于所有节目之中。在人们越来越多的参与各种活动...
小学家长会学生欢迎词 小学家长会学生欢迎词小学家长会学生欢迎词文章标题:小学家长会学生欢迎词家长会欢迎辞亲爱的叔叔阿姨,爷...
消夏晚会主持词 2017消夏晚会主持词  漫漫暑假,天气越来越燥热,不妨在炎热的午后,参加一场纳凉晚会,欣赏社区带来...
周立波脱口秀台词 周立波脱口秀台词集锦四十岁之前喝酒是为了别人的一句~~厉害!醉了!!四十岁以后喝酒是为了自己的一句~...
圣诞节活动主持词节目串词 圣诞节活动主持词节目串词3篇  根据活动对象的不同,需要设置不同的主持词。在人们积极参与各种活动的今...
生日华诞主持词 生日华诞主持词范文各位领导,各位朋友,各位来宾,女士们,先生们:  中午好。  今天是个喜庆的日子,...
学术会议主持词 学术会议主持词  什么是主持词  由主持人于节目进行过程中串联节目的串联词。如今的各种演出活动和集会...
订婚仪式及主持词 订婚仪式及主持词范文(通用3篇)  活动对象的不同,主持词的写作风格也会大不一样。在现在的社会生活中...
古剑奇谭欧阳少恭经典台词参考 古剑奇谭欧阳少恭经典台词参考  大型古装玄幻剧《古剑奇谭》正在湖南卫视热播,剧中,乔振宇饰演温文尔雅...
幼儿园晨会主持词 幼儿园晨会主持词  美好的一天从早上开始,从晨会开始,从大家的好的状态开始,从最好的开始。以下是小编...
诗文诵读展示主持词 诗文诵读展示主持词  主持词没有固定的格式,他的最大特点就是富有个性。在当今不断发展的世界,很多晚会...
大学生毕业典礼的主持词 大学生毕业典礼的主持词(精选5篇)  活动对象的不同,主持词的写作风格也会大不一样。在当下的社会中,...
婚礼的主持词 婚礼的主持词  婚礼的主持词(精选21篇)  主持词的写作要突出活动的主旨并贯穿始终。随着社会一步步...
主婚人致辞 主婚人致辞(精选6篇)  在生活、工作和学习中,大家都写过致辞吧,致辞具有很强的实用性和针对性。还在...
促销活动主持词 促销活动主持词  利用在中国拥有几千年文化的诗词能够有效提高主持词的感染力。在现今人们越来越重视活动...