spring cache缓存优化

缓存优化

基于Redis进行缓存优化

在这里插入图片描述

1.环境搭建

Redis进行配置
加入Pom文件

        <!--导入Redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

加入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;
    }
}

yml中加入配置
在这里插入图片描述

2.短信验证码、登陆优化

给验证码加入有效时间的验证,设置好短信验证码的有效时间
在这里插入图片描述

如果登陆成功,就自动删除缓存中的验证码
优化位置:com.cc.controller.UserController sendMsg和login
注入RedisTemplete
在这里插入图片描述
针对验证码进行优化
在这里插入图片描述
针对登录后进行优化
login方法中
在这里插入图片描述
在这里插入图片描述

这里过滤器也要改,因为登陆的id数据由session变成了redis存放,所以要把过滤器的相关部分进行改造
在这里插入图片描述

3.缓存前台菜品数据

在这里插入图片描述

缓存思路,要保证缓存数据库和DBMS内的数据保持同步,避免读到脏数据(没更新的数据)
在这里插入图片描述

对DishController进行优化,加入了缓存
再次访问可以发现,如果已经缓存过了当前的菜品分类,就不会再查数据库了

扫描二维码关注公众号,回复: 15013439 查看本文章

更新菜品同时更新缓存
保证少出现脏数据,所以加入清理缓存,不及时清理的话,新数据保存上来,列表数据库无法同步更新。就会出现问题。
这里清理精确数据。大面积清缓存也是比较费性能的
这种就是全清理
在这里插入图片描述

这种是精确清理

在这里插入图片描述

2.SpringCache

简介
在这里插入图片描述

SpringCache常用注解及功能
在这里插入图片描述

快速起步
启动类上要加入@EnableCaching注解,启用缓存框架
在这里插入图片描述

@CachePut注解
缓存方法返回值,缓存一条或者多条数据
在这里插入图片描述

@CacheEvict注解
删除缓存
在这里插入图片描述

@Cacheable注解
先看看Spring是否已经缓存了当前数据,如果已经缓存那么直接返回。
如果没有缓存就直接缓存到内存里
在这里插入图片描述

一些特殊情况,condition属性和Unless属性
在这里插入图片描述

前面都是用SpringCache自带的缓存容器,性能肯定比不了Redis
所以现在开始引入Redis作为SpringCache缓存的产品
切换为Redis作为缓存产品

SpringCache-Redis
在这里插入图片描述

导入jar包
在这里插入图片描述

注入相对应的缓存产品Manager就可以了,这里以RedisManager为例
在这里插入图片描述

利用SpringCache-Redis来缓存套餐数据
在这里插入图片描述

启动类上要加入@EnableCaching注解,启用缓存框架
在这里插入图片描述

加入注解时的坑
这里相当于是从Return中拿到Setmeal中的属性,但是Return时的数据是Result封装的Setmeal数据,显然无法完成序列化,这里也是需要对Result类进行序列化的改造
在这里插入图片描述

继承序列化类,使其可以序列化
在这里插入图片描述

此时就完成了缓存的优化,此时如果缓存中有当前value名字的缓存,就自动返回,如果没有就查询一下。当前缓存自动过期的时间在yml里面有详细配置

保存套餐方法缓存优化
一保存套餐,对应的缓存就得删除,因为数据更新了要重新获取
还有更新套餐,理由同上

删除方法要加
在这里插入图片描述

保存方法也要加
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011624157/article/details/128682950