交作业
Redis 修改抢选课
1.曾经的项目是所有的查询和新增都直接读写数据库
2.学习了Redis尝试去改造一下
基本流程
图片:
大体流程就是就是这样,我改造的是学生选课部分。
开始
学生查询课程信息
学生频繁查询课程信息列表 , 对课程信息列表做了缓存
把课程id 作为key,上限人数作业value
//当课程信息的缓存不在的时候把信息保存到redis
if(!jedis.exists(courseKey)){
jedis.set(courseKey,eachRecord.get("upper").toString());
JedisUtils.expire(courseKey,60*60);
}
学生开始选课
1)校验是否计划开启状态中
在计划开启是把进行中的计划id,保存到redis 中。
学生端直接取redis的值来校验
Jedis jedis = JedisUtils.getJedis();
if (!jedis.exists(key+classId)) {
System.out.println( "选课计划尚未开启");
}
2)校验同一个用户连点选课按钮
// 验证是否重复选课
long times = jedis.incrBy(selectKey,1);
// 设置过期时间
JedisUtils.expire(selectKey,10);
if(times != 1){
System.out.println("操作过于频繁");
}
3)学生不能选超了的校验
long value = jedis.incrBy(courseKey,-1);
if(value<0){
System.out.println("课程人数已满");
jedis.incrBy(courseKey,1);
}
4) 最后保存学生选课信息了 用mq啊 redis啊 直接写保存接口都行。
总结
我主要改动点,之前学生选课的校验都是通过直接操作数据库来校验,学生是否存在选课的资格,改成了操作redis来校验学生选课的校验,和保证数据的正确性。
主要使用incrBy的方法来保存抢课人数不会超出设置和保存用户频繁操作。
学习之路还长,用的比较粗糙,加油!