栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【项目优化01】使用Git管理项目及使用redis缓存短信验证码,菜品以及套餐数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【项目优化01】使用Git管理项目及使用redis缓存短信验证码,菜品以及套餐数据

文章目录
    • 1. 使用Git管理项目
    • 2. redis缓存
      • 2.1 使用redis缓存短信验证码
      • 2.2 使用redis缓存菜品数据
      • 2.3 使用Spring Cache缓存套餐数据

1. 使用Git管理项目
  1. 选择在我们文件的根目录创建仓库
  2. 导入ignore文件,将不需要导入仓库的文件写入该文件
  3. 将文件添加至暂存区
  4. 添加至暂存区后就可以进行commit操作
  5. 推送至远程仓库前需要先关联一下远程仓库

    添加远程仓库的地址链接
  6. 勾选需要上传文件,输入提交信息,选择commit and push,将项目推送至远程仓库。
  7. 将原始项目推送至远程仓库后,我们接下来创建新的分支,用来进行项目优化,当我们优化项目如果出现问题,就可以将其回滚至上个版本的项目,避免影响之前的项目。


如果项目推送失败的,多半是因为远程仓库和本地仓库的文件不一样导致,记得去看前面的blog,里面有解决方法,亲测可用。

OK,使用Git管理项目就介绍到这里。

接下来我们介绍一下 使用redis缓存。

2. redis缓存 2.1 使用redis缓存短信验证码
  1. 导入redis相关maven坐标
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
  1. 修改配置文件,指定redis的主机及端口
  redis:
    host: localhost
    port: 6379
  1. 添加配置类RedisConfig,这是一个反序列化的工具
@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;
    }
}

之前我们使用session来存储我们的短信验证码,默认时间是30分钟,接下来我们使用redis来缓存我们的短信验证码,使用phone手机号作为key,code作为value,时间是五分钟。

当用户登录成功后,我们就将缓存中的验证码删除。

2.2 使用redis缓存菜品数据

首先我们明确一下为什么使用redis缓存来保存我们的菜品数据。

当我们客户端的用户量很多且同一时间访问我们的页面的时候,页面会发送请求去访问我们的数据库,一旦请求次数过多,数据库效率会变慢甚至崩溃,因此,我们使用redis缓存可以实现用户只需访问一次数据库后,只要这时数据库内容不发生变化,用户就能直接从我们的缓存中读取数据,访问效率大大提高。

改变思路如下:

  1. 改造DishController中的list方法,先从redis中读取数据,当redis中没有数据时,再去访问数据库。
  2. 改造DishController中的修改和更新方法,加入清理缓存的逻辑。

需要注意的是

在使用缓存过程中,要保证数据库中的数据和缓存中的保持一致,如果数据库中的数据发生变化,要及时清理缓存中的数据。

在list方法中创建一个动态key,再根据key去缓存中获取相对应的数据。

当然了,第一次查询的时候缓存中肯定没有数据,因此,我们会先查询一次数据库,然后将本次查询的数据根据key-value形式存入缓存,接下去只要数据库中的数据不发生变化,就直接从缓存中拿数据。

		List dishDtoList = null;

        //1.动态构建一个key,根据key获取值 key:dish_123863546_1
        String key = "dish_"+dish.getCategoryId()+"_"+dish.getStatus();

        //2.根据key从redis中获取相对应的数据
        dishDtoList  = (List) redisTemplate.opsForValue().get(key);

        //3. 如果数据不为空,则直接返回该数据集合
        if(dishDtoList!=null){
            return R.success(dishDtoList);
        }
		//4. 获取数据为空,查询数据库
        redisTemplate.opsForValue().set(key,dishDtoList);

最后,在新增菜品,修改和添加菜品时将缓存中的数据清理。

        //删除缓存中的数据
        String key = "dish_"+ dishDto.getCategoryId()+"_1";
        redisTemplate.delete(key);
2.3 使用Spring Cache缓存套餐数据


  1. 导入spring cache坐标依赖
 
     org.springframework.boot
     spring-boot-starter-cache
 
  1. 修改yml配置文件
    没有使用注解之前,缓存数据的有效时间不是手动设置就是默认为永久有效,现在,我们可以直接在yml文件中配置缓存有效时间,yml中时间单位为毫秒。
spring:
  cache:
    redis:
      time-to-live: 1800000 #设置过期时间30分钟
  1. 开启缓存注解功能

  2. 使用注解缓存数据
    使用Cacheable注解在执行程序前,会先判断缓存中是否有数据,有数据直接从缓存中拿数据,否则执行程序查询数据库,然后将数据存入缓存中。

value是缓存的名称(一类缓存),每个缓存名称下面可以有多个key,在数据库数据发生变化后,我们只需要将该类缓存清理就可以直接将缓存中的数据清除。

    
    @GetMapping("/list")
    @Cacheable(value = "setmealCache",key = "#setmeal.categoryId")
    public R> list(Setmeal setmeal){
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(setmeal.getCategoryId()!=null,Setmeal::getCategoryId,setmeal.getCategoryId());
        queryWrapper.eq(setmeal.getStatus()!=null,Setmeal::getStatus,setmeal.getStatus());

        List setmealList = setmealService.list(queryWrapper);
        return R.success(setmealList);
    }

在后台新增套餐,修改,删除,售卖状态发生变化,我们也同样需要将缓存中的数据清理。

清理方法一样,如下

@CacheEvict将一条或者多条数据从缓存中清理,按缓存的名称清理,allEntries = true代表全部清理。

    
    @PutMapping
    @CacheEvict(value = "setmealCache",allEntries = true)
    public R update(@RequestBody SetmealDto setmealDto){
        setmealService.updateWithDish(setmealDto);
        return R.success("修改成功");
    }

验证缓存是否设置成功,可以先在客户端将套餐数据先查询一遍,如果成功的话数据会保存在我们的缓存中,这时候我们清理控制台,在客户端重新发送查询指令,只要我们控制台没有发送sql查询数据库,就证明添加成功。

我们之前缓存菜品数据没有使用缓存,感兴趣可以将此方法应用到菜品数据缓存中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号