(十七)在线教育网站搭建-将讲师列表和课程列表存入redis缓存

redis

1. 使用redis的列表

1
2
3
4
5
127.0.0.1:6379> lpush key value #从左插入value到key列表
127.0.0.1:6379> rpush key value #从右插入value到key列表
127.0.0.1:6379> llen key #得到key列表长度
127.0.0.1:6379> del key #删除key列表
127.0.0.1:6379> lrange teacher 0 20 #得到key列表的[0,20]元素

2. redis中文乱码问题

启动客户端采用 redis-cli –raw

3. 添加列表进redis

3.1. redis-Maven依赖

1
2
3
4
5
6
7
8
9
10
11
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- json转string -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.10.0</version>
</dependency>

3.2. service中的实现

从右插入列表,从左读出列表

开始时,redis中没有数据,从数据库中取数据放入redis中,并存入teacherTotal用于判断redis中数据是否存入

而后就从redis中取数据,但后台可能增加讲师记录,所以设置缓存时效为1天

3.2.1. 讲师

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@Autowired
StringRedisTemplate redisTemplate;

//前端展示页面
@Override
public Map<String, Object> frontListPageTeacher(String current, String size) {

Long currentPage = Long.parseLong(current);
Long pageSize = Long.parseLong(size);

Long total = 0L;

List<EduTeacher> results = new ArrayList<>();

//存入所有记录
Map<String,Object> map = new HashMap<>();


try{
ObjectMapper objectMapper = new ObjectMapper();

String key = redisTemplate.opsForValue().get("teacherTotal");

if(!StringUtils.isEmpty(key)) {

total = Long.parseLong(key);
List<String> teachers = redisTemplate.opsForList().range("teacher",
pageSize * (currentPage - 1), pageSize * currentPage-1);

for(String str:teachers){
EduTeacher teacher= objectMapper.readValue(str, EduTeacher.class);
results.add(teacher);
}

}else{

Page<EduTeacher> page = new Page<>(currentPage,pageSize);
//结果 按sort降序,相同时按id升序
QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("sort");
queryWrapper.orderByAsc("id");

Page<EduTeacher> eduTeacherPage = baseMapper.selectPage(page, queryWrapper);

//得到页内容
results = eduTeacherPage.getRecords();
//得到所有记录数
total = eduTeacherPage.getTotal();
//存1天
redisTemplate.opsForValue().set("teacherTotal",total+"",1,TimeUnit.DAYS);

List<EduTeacher> teachers = baseMapper.selectList(queryWrapper);
for(EduTeacher teacher: teachers){
String obj = objectMapper.writeValueAsString(teacher);

redisTemplate.opsForList().rightPush("teacher",obj);

//System.out.println(redisTemplate.opsForList().size("teacher"));
}
redisTemplate.expire("teacher",1, TimeUnit.DAYS);

}
} catch (JsonProcessingException e) {
throw new EduException(20001,"json无法转字符串");
}

//存入所有记录
map.put("total",total);
map.put("items",results);

return map;
}

3.2.2. 课程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//前台分页查询课程信息
@Override
public Map<String,Object> frontSelectPage(String current, String size) {

Long currentPage = Long.parseLong(current);
Long pageSize = Long.parseLong(size);

Long total = 0L;

List<EduCourse> results = new ArrayList<>();

//存入所有记录
Map<String,Object> map = new HashMap<>();


try {
ObjectMapper objectMapper = new ObjectMapper();

String key = redisTemplate.opsForValue().get("courseTotal");

if(!StringUtils.isEmpty(key)) {
total = Long.parseLong(key);

List<String> courses = redisTemplate.opsForList().range("course",
pageSize*(currentPage-1),pageSize*currentPage-1);

for(String str:courses){
EduCourse teacher= objectMapper.readValue(str, EduCourse.class);
results.add(teacher);
}

}else{

Page<EduCourse> page = new Page<>(currentPage,pageSize);

Page<EduCourse> eduCoursePage = baseMapper.selectPage(page,null);

results = eduCoursePage.getRecords();

total = eduCoursePage.getTotal();
redisTemplate.opsForValue().set("courseTotal",total+"",1, TimeUnit.DAYS);

List<EduCourse> courses = baseMapper.selectList(null);
for(EduCourse course: courses){
String obj = objectMapper.writeValueAsString(course);

redisTemplate.opsForList().rightPush("course",obj);

//System.out.println(redisTemplate.opsForList().size("course"));
}
redisTemplate.expire("course",1, TimeUnit.DAYS);

}
} catch (Exception e) {
throw new EduException(20001,"稍后再试");
}

map.put("total",total);
map.put("courses",results);

return map;
}
本文结束  感谢您的阅读