缓存优化
基于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进行优化,加入了缓存
再次访问可以发现,如果已经缓存过了当前的菜品分类,就不会再查数据库了
更新菜品同时更新缓存
保证少出现脏数据,所以加入清理缓存,不及时清理的话,新数据保存上来,列表数据库无法同步更新。就会出现问题。
这里清理精确数据。大面积清缓存也是比较费性能的
这种就是全清理
这种是精确清理
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里面有详细配置
保存套餐方法缓存优化
一保存套餐,对应的缓存就得删除,因为数据更新了要重新获取
还有更新套餐,理由同上
删除方法要加
保存方法也要加