基于SpringBoot的高并发选课系统: 本项目主要解决在高校选课场景下,保证选课系统在大量读写压力下不宕机,以及选课时尽可能提高选课QPS,给学生一个良好的选课体验,完成上述功能同时保证选课安全

您所在的位置:网站首页 java高并发以及解决 基于SpringBoot的高并发选课系统: 本项目主要解决在高校选课场景下,保证选课系统在大量读写压力下不宕机,以及选课时尽可能提高选课QPS,给学生一个良好的选课体验,完成上述功能同时保证选课安全

基于SpringBoot的高并发选课系统: 本项目主要解决在高校选课场景下,保证选课系统在大量读写压力下不宕机,以及选课时尽可能提高选课QPS,给学生一个良好的选课体验,完成上述功能同时保证选课安全

2023-08-30 00:08| 来源: 网络整理| 查看: 265

基于SpringBoot的高并发选课系统 项目简介

本项目主要解决在高校选课场景下,保证选课系统在大量读写压力下不宕机,以及选课时尽可能提高选课QPS,给学生一个良好的选课体验,完成上述功能同时保证选课安全

运行效果图

登陆

首页

列表

选课

退课

其他效果图请到image文件夹中查看

技术选型

前端:Bootstrap、JQuery、Thymeleaf

后端:SpringBoot、Shiro、JPA、Caffeine

中间件:Redis、RabbitMQ、Druid

数据库:MySQL

优化思路 页面查看

解决思路:从Redis缓存中查看数据,减少数据库访问

从数据可见性角度来讲,分为对所有人可见的公有信息,和只有自己可见的私有信息

公有信息

不变动: 必修课课程表中的数据是不变动,一般展现的是该专业学生本学期所必选的的课程信息,这类信息不发生变动,缓存到Redis中,缓存时间为一天

变动:

必修课课程一般对应好几个授课计划,以高数来讲,这个课可能会对应好几个授课教师以及好几个时段的授课计划,但这类必修课授课计划学校一般会为学生预选,只有少部分学生因不满意授课时段或授课老师会去退课并重新选课,所以这类数据变动频率小,Redis缓存一分钟 选修课授课计划一般是一个课程对应一个授课计划,因为是选修课,所以学校不为学生预选,需要学生自己选,所以这块并发压力大,数据变化频繁,Redis缓存一分钟

缺点: 学生看到的课程余量存在延迟,可能已经选完了,但列表上还显示有课,因此会在学生第一次进入选课页面提醒学生数据有延迟

特有优化: 数据库在加载授课计划信息时,只会加载有余量的课程

私有信息

不变动: 考试查询和成绩查询,这类数据不会发生变动,学生看个几次就不会再看了,Redis缓存30分钟

变动: 选课结果,在选课初期学生可能频繁查看选课结果,Redis缓存30分钟

特有优化: 选课结果按时间降序排序,优先展示最新选的课程

登陆 学生可能多次登陆系统,第一次登陆时将学生信息加载进Redis,减少后续登陆时对数据库的访问 通过单例模式构建全局唯一类,根据sessionID保存学生学号,供后续使用 选课

此功能为整个系统的重点优化之处, 主要分为两大步骤,选课安全验证和执行选课操作

选课安全验证 IP限流,每分钟可以访问三次,与学号绑定,通过Redis实现 Integer sno = StudentIDUtils.getStudentIDFromMap(); Integer count = (Integer) redisService.get("ip-", String.valueOf(sno)); if (count == null) { //一分钟内可以访问三次 redisService.set("ip-", String.valueOf(sno), 1, 1, TimeUnit.MINUTES); }else if (count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3