瑞吉外卖优化--使用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... 二年级游乐园冲浪作文 篇一我最喜欢的游乐园冲浪今天,我和爸爸妈妈去了一个很大很有趣的游乐园。这个游乐...
二年级有趣的游戏作文200字... 二年级有趣的游戏作文200字 篇一:捉迷藏捉迷藏是我们二年级最喜欢的游戏之一。这个游戏的规则很简单:...
我的好朋友二年级作文【实用6... 我的好朋友二年级作文 篇一我的好朋友我有一个非常好的朋友,她叫小芳。她和我在同一个班级,我们从小学一...
我的家【优质6篇】 我的家 篇一我的家是一个温馨而快乐的地方。无论是平日的热闹还是周末的宁静,家里总是充满着欢声笑语和爱...
二年级作文不少于200个字【... 二年级作文不少于600个字 篇一我的暑假生活暑假终于来了,我迫不及待地迎接了这个长假。在这个暑假里,...
二年级暑假趣事作文捉老鼠(推... 二年级暑假趣事作文捉老鼠 篇一暑假快到了,我和弟弟决定在家里玩捉老鼠的游戏。我们找来了一些小道具,准...
小学二年级避暑山庄旅游作文(... 小学二年级避暑山庄旅游作文 篇一我和家人去了一个非常有趣的地方——避暑山庄。这个地方真的很美,有很多...
二年级作文游庐山【精简6篇】 二年级作文游庐山 篇一我和爸爸妈妈一起去了庐山。庐山是中国著名的山岳风景区,被誉为“江南第一山”。我...
二年级下册看图写话春天来了作... 二年级下册看图写话春天来了作文 篇一春天来了春天来了,大地变得生机勃勃。图中的小朋友们正在户外玩耍,...
二年级打雪仗作文指导【通用6... 二年级打雪仗作文指导 篇一打雪仗是冬天最有趣的活动之一,对于二年级的小朋友来说,更是一种享受。下面是...
二年级美丽的早晨作文(实用6... 二年级美丽的早晨作文 篇一美丽的早晨早晨的阳光透过窗户洒进来,房间里弥漫着一股清新的味道。我慢慢睁开...
小学二年级海边旅游作文200... 小学二年级海边旅游作文200字作文 篇一我和家人去海边旅游了,真是一个美好的经历!早上,我们一大早就...
二年级【优秀6篇】 二年级 篇一:我的暑假生活暑假终于来了,我迫不及待地开始了我的暑假生活。在这个悠长的假期里,我过得非...
赏荷花二年级作文【通用6篇】 赏荷花二年级作文 篇一欣赏荷花的美丽今天,我和爸爸妈妈一起去公园赏荷花。公园里有一个大大的荷花池,里...
舞蹈汇演作文二年级【精彩6篇... 舞蹈汇演作文二年级 篇一舞蹈汇演是一场精彩绝伦的表演,让我感受到了舞蹈的魅力和美妙。我在二年级的时候...
二年级作文我家的厨师(优质6... 二年级作文我家的厨师 篇一我家的厨师是我妈妈。她是一个非常厉害的厨师,每天都能给我们做出美味可口的饭...
童年趣事作文:枕头大战【精选... 童年趣事作文:枕头大战 篇一小时候的我总是充满了无尽的精力和好奇心,每天都在探索世界的各个角落。而最...
家乡的菊花作文二年级(经典6... 家乡的菊花作文二年级 篇一家乡的菊花我家乡是一个美丽的小镇,四季如春,花草繁盛。其中,最引人注目的要...
二年级小作文28篇【精简3篇... 二年级小作文28篇 篇一我最喜欢的动物我最喜欢的动物是猫。猫咪有软软的毛,尤其是它们的小脸上,摸起来...
二年级写我的家乡【优选6篇】 二年级写我的家乡 篇一我的家乡是一个美丽的小城镇。它位于一个宽广的山谷之中,四周环绕着青翠欲滴的群山...