项目优化

缓存优化

image-20220829114113741

纳入Git管理

在码云中新建一个仓库为:

image-20220829114442275

将项目上传到仓库中:

先创建一个本地的仓库:

image-20220829115026209

add本地仓库并提交,再push远程仓库

新建一个分支为V1.0,对于所有缓存的操作,都在这个v1.0的分支下操作。

环境搭建

pom.xml文件中导入spring data redis的maven的坐标

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

添加配置文件

1
2
3
4
5
6
spring: 
redis:
host: 192.168.106.100
port: 6739
password: Zlw199805
database: 0

添加配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 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.setHashKeySerializer(new StringRedisSerializer());

redisTemplate.setConnectionFactory(connectionFactory);

return redisTemplate;
}

}

缓存短信验证码

image-20220829121757768

1:

1
2
3
4
5
//将生成的验证码保存到session中
// httpSession.setAttribute(phone,code);

//将生成的验证码缓存到redis中
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);

2:

1
2
3
4
5
 //获取session里面的验证码
// Object codeInSession = httpSession.getAttribute(phone);

//获取redis中的验证码
Object codeInSession = redisTemplate.opsForValue().get(phone);

3:

1
2
//将redis中缓存的验证码删除
redisTemplate.delete(phone);

缓存菜单数据

image-20220829130815939

改造list方法:

1
2
3
4
5
6
7
8
9
10
11
 List<DishDto> dishDtoList = null;
//动态的构造key
String key = "dish_"+dish.getCategoryId()+"_"+dish.getStatus();
//获取key
dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
//如果存在,则直接从redis中返回
if (dishDtoList!=null) return R.success(dishDtoList);

//如果不存在,执行操作后:
//如果不存在,则从数据库中查找,并加入的redis中
redisTemplate.opsForValue().set(key,dishDtoList,60, TimeUnit.MINUTES);

改造save和update方法:

1
2
3
4
5
6
7
 //清理所有菜品缓存数据
// Set keys = redisTemplate.keys("dish_*");
// redisTemplate.delete(keys);

//精确清理:清理某个分类下面的菜品缓存数据
String key = "dish_" + dishDto.getCategoryId()+"_1";
redisTemplate.delete(key);

提交给本体的Git,并推送到远程的仓库

Spring Cache

image-20220829134419524

image-20220829134535958

缓存套餐数据


项目优化
http://example.com/2022/08/29/项目优化/
作者
zlw
发布于
2022年8月29日
许可协议