java 瑞吉外卖优化day1 缓存短信验证 git分支开发 缓存套餐数据 SpringCache

缓存优化

 

我们将之前写的瑞吉项目push到gitee上,然后新建一个分支v1.0,在v1.0上进行优化,并且push上去

环境搭建

 

host跟ip都要写自己对应的 ,如果没有设置密码 就不用写密码配置

新建RedisConfig配置类 控制不让key序列化:

@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()); // key序列化
        //redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // value序列化

        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

当我们没有主动设置RedisTemplate的Bean的时候SpringBoot会自带设置RedisTemplate的bean:

 

配置好后,我们选择提交并push

缓存短信验证码

实现思路

 

//将生成的验证码,缓存到redis中,并设置有效期为5分钟
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
//如果用户登录成功,我们就直接删除redis中的验证码
redisTemplate.delete(phone);

缓存菜品数据

每次我们点击分类,后台都会进行很多的sql查询,为了减少后台工作量

我们需要缓存菜品的数据

 我们按照分类,对菜品数据进行缓存,list方法里先从redis获取数据,有就直接返回,没有就查数据库然后把数据放入redis

但是我们更新完菜品后,如果还从缓存拿数据,就跟数据库不一样了,所以我们要在涉及到数据库更新的方法里,加入清理缓存逻辑

List<DishDto> dishDtos=null;
//按格式拼接一个key
String key = "dish_"+dish.getCategoryId()+"_"+dish.getStatus();
//先从redis中获取缓存数据
dishDtos = (List<DishDto>) redisTemplate.opsForValue().get(key);

//判断获取的dishDtos是否为空,有内容则直接返回
if (dishDtos!=null){
    return new R(1,"查询成功",dishDtos);
}

//如果没有内容 就继续往下执行

执行完之后,将数据放到Redis缓存中:

//将菜品数据缓存到Redis 时长为60分钟
redisTemplate.opsForValue().set(key,dishDtos,60, TimeUnit.MINUTES);

清理缓存:

我们有两种方式:一种是清除所有菜品的缓存数据,一种是清除当前的菜品类的缓存数据

清除所有菜品缓存数据: 先获取dish_开头的key的Set集合,然后删除

清理当前操作的菜品类的缓存数据 

 

经过测试没有问题,我们切回主分支,然后将v1.0合并到主分支

SpringCache快速应用

 SpringCache常用注解

 我们先讲SpringCache基础功能 

坐标这块我们Springboot-web就已经包括了SpringCache了

 #user对应的是return出来的user

根据key删除相应缓存:

 

Cacheable:

 

 

切换成使用redis配合缓存

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

 

 

 

套餐数据缓存

实现思路:

 

  我们的结果需要实现序列化接口,否则无法用注解的方式缓存

 allEntries = true 表示所有的setmeal的缓存数据都要删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值