任务
1. 搭建前台环境(NUXI)
2. 整合前台页面
3. 首页轮播图
4. 首页显示热门课程和名师
5. 首页数据用Redis做缓存
1. 搭建前台环境(NUXI)
路由
静态路由:
动态路由:
- 每次点击超链接,路由都不同,如:url中包含id,id个不相同。
- url包含id时,前面加_,如_id。
2. 首页Banner显示
- service下创建service_cms;创建配置文件;创建表(crm_banner);生成实体类;
- 接口实现
这里写了2个Controller,一个是管理员访问的,一个是前台用户来访问的。
管理员后台Controller
用户Controller
热门课程
查询热门课程和名师的controller接口,位于edu-service
首页banner显示
- 创建utils/request.js,封装request
- 创建接口banner.js调用后台接口
- 首页banner调用前台接口
热门课程
- 修改前端
测试:
Redis
- nosql数据库;
- key-value存储;
- 读写速度快;
- 支持多种数据结构:String,set,zset,list ,hash;
- 支持过期时间;
- 支持事务
把经常查询的数据可以放在Redis中;而经常修改的数据不适合放在Redis中
1. Spring Boot 引入Redis依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
2. 创建Redis配置类
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题),过期时间600秒
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(600))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
3. 数据加入Redis
@Cacheable: 先去缓存查找数据,如果没数据,在DB查找,然后将查找的数据放在缓存中;如果有数据,直接返回数据。
@CacheEvict: 会清空缓存,一般用在更新或者删除方法上。
4. 启动Redis
启动Redis;重启service_cms;刷新首页。
测试:
清空控制台,刷新页面,看到无日志输出,可以证明从Redis获得数据。
(完)