缓存课程表
不用Redis数据库
用户端数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力也会增大,系统响应慢、用户体验差
用户-----》前端页面------》后端服务------》数据库
使用Redis可以把数据缓存到内存中,减少数据库查询操作。
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
用户-----》前端页面------》后端服务 ------》判断是否存在缓存?存在------》读取缓存返回前端
不存在------>查询数据库----》载入缓存
具体实现
1.开启服务
2.导入依赖
<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>
3.在properties文件中配置属性
# 自定义属性配置
#REDIS
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword
spring.redis.database=9
4.代码实现
①@EnableCaching 开启缓存注解功能,加在启动类上
②@Cacheable 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中
在课程表控制类的返回课程表信息的方法上加上@Cacheable注解,返回课程表信息时,往缓存存课程表信息
@PostMapping("/scheduleList.do")
@ResponseBody
@Cacheable(value = "courseCache" ,key="1")// courseCache::1
// value:缓存的名称,每个缓存名称下面可以有多个key
// key:缓存的key
public List<CourseScheduleVo> scheduleList()
//代码部分省略。。。
}
return courseScheduleVoList;
}
当第一次查看课程表,会从数据库中进行查询,同时将查询的结果存储到Redis中,在后续访问直接从Redis缓存中查询,不再查询数据库。
可以看到Redis数据库中已经有缓存的数据
点击查看其他月份IDEA控制台也没有出现sql语句,说明是从Redis中查询的数据。
清空缓存:
@GetMapping("/refreshCache.do")
@ResponseBody
@CacheEvict(cacheNames ="courseCache",key = "1")
public R refreshCache(){
return R.ok();
}