瑞吉外卖优化--使用Redis缓存技术和SpringCache

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

1.缓存优化

1.1 环境搭建

1.1.1 码云或者GitHub新建仓库

登录码云后创建新仓库,如图
瑞吉外卖优化--使用Redis缓存技术和SpringCache_第1张图片

1.1.2 配置git

  • 选择git添加所有文件,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第2张图片
  • 同上操作点击commit Directory后输入提交信息,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第3张图片
  • 将之间新建仓库后的远程地址复制到idea中,其中:
    • 远程地址瑞吉外卖优化--使用Redis缓存技术和SpringCache_第4张图片
    • 找到远程仓库管理,添加地址,如图

瑞吉外卖优化--使用Redis缓存技术和SpringCache_第5张图片
- 配置仓库,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第6张图片

  • 输入密码账号后点击push即可,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第7张图片
  • 刷新后可在新建码云仓库看到项目已经推送瑞吉外卖优化--使用Redis缓存技术和SpringCache_第8张图片
  • 选中本地master右键新建自己的分支,用于代码开发并push,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第9张图片

1.1.3 配置代码环境

  • 配置redis,将依赖加入到POM文件中,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第10张图片
  • 配置application.yml文件,加入redis配置,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第11张图片
  • config包下,配置Redis配置,代码如下:
@Configuration  
public class RedisConfig extends CachingConfigurerSupport {  
    @Bean  
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {  
        RedisTemplate<Object, Object> 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中添加缓存代码

瑞吉外卖优化--使用Redis缓存技术和SpringCache_第12张图片

1.2.3 登录controller中使用Redis

瑞吉外卖优化--使用Redis缓存技术和SpringCache_第13张图片

1.3 缓存菜品数据

1.3.1 需求分析

![[Pasted image 20230307165715.png]]

1.3.2 解决办法

![[Pasted image 20230307165738.png]]

1.3.3 代码开发

  • 添加缓存
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第14张图片
    ![[Pasted image 20230307170340.png]]
  • 清除缓存,在save方法和update方法均加入清楚缓存方法,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第15张图片
  • 提交到本地,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第16张图片
  • 切换到主分支,并分支到主分支并推送,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第17张图片

1.4 套餐其它功能

1.4.1 其它功能

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

1.4.1 代码开发

controller层加入

//根据id找具体套餐信息  
@GetMapping("/dish/{id}")  
public Result<List<DishDto>> showSetmealDish(@PathVariable Long id) {  
    //条件构造器  
    LambdaQueryWrapper<SetmealDish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();  
    //手里的数据只有setmealId  
    dishLambdaQueryWrapper.eq(SetmealDish::getSetmealId, id);  
    //查询数据  
    List<SetmealDish> records = setmealDishService.list(dishLambdaQueryWrapper);  
    List<DishDto> dtoList = records.stream().map((item) -> {  
        DishDto dishDto = new DishDto();  
        //copy数据  
        BeanUtils.copyProperties(item, dishDto);  
        //查询对应菜品id  
        Long dishId = item.getDishId();  
        //根据菜品id获取具体菜品数据,这里要自动装配 dishService
        Dish 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<String> status(@PathVariable String status, @RequestParam List<Long> ids) {  
    LambdaUpdateWrapper<Setmeal> updateWrapper = new LambdaUpdateWrapper<>();  
    updateWrapper.in(Setmeal::getId, ids);  
    updateWrapper.set(Setmeal::getStatus, status);  
    setmealService.update(updateWrapper);  
    return Result.success("批量操作成功");  
}  
//修改时根据套餐id查找具体信息回显  
@GetMapping("/{id}")  
public Result<SetmealDto> getById(@PathVariable Long id) {  
    Setmeal setmeal = setmealService.getById(id);  
    SetmealDto setmealDto = new SetmealDto();  
    //拷贝数据  
    BeanUtils.copyProperties(setmeal, setmealDto);  
    //条件构造器  
    LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>();  
    //根据setmealId查询具体的setmealDish  
    queryWrapper.eq(SetmealDish::getSetmealId, id);  
    List<SetmealDish> setmealDishes = setmealDishService.list(queryWrapper);  
    //然后再设置属性  
    setmealDto.setSetmealDishes(setmealDishes);  
    //作为结果返回  
    return Result.success(setmealDto);  
}  
//修改套餐中的菜品  
@PutMapping  
//设置allEntries为true,清空缓存名称为setmealCache的所有缓存  
//@CacheEvict(value = "setmealCache", allEntries = true)
public Result<Setmeal> updateWithDish(@RequestBody SetmealDto setmealDto) {  
    List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();  
    Long setmealId = setmealDto.getId();  
    //先根据id把setmealDish表中对应套餐的数据删了  
    LambdaQueryWrapper<SetmealDish> 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 测试

  • 测试修改状态,如图瑞吉外卖优化--使用Redis缓存技术和SpringCache_第18张图片
    改价格为60
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第19张图片
    显示修改成功![[Pasted image 20230307220732.png]]
  • 停售功能结果和菜品类似,不再放图

1.5 缓存套餐数据

1.5.1 方法

使用SpringCache中的Redis缓存

1.5.2 步骤

瑞吉外卖优化--使用Redis缓存技术和SpringCache_第20张图片

1.5.3 具体步骤

  • 导入坐标,其中Spring Cache已导入,Redis上文已导入
  • 配置缓存过期时间,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第21张图片
  • 加入@EnableCaching注解,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第22张图片
  • 加入@Cacheable注解,如图
    ![[Pasted image 20230307213318.png]]
  • 加入@CacheEcict注解,如图
    瑞吉外卖优化--使用Redis缓存技术和SpringCache_第23张图片

1.5.4 提交本地git

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

你可能感兴趣的:(Redis,项目实战,Java,redis,intellij-idea,java,缓存)