实验室落地项目处理医院预约号的高并发问题

关于高并发问题的点滴思考 关于高并发问题的点滴思考 问题背景:曾经做过一个项目,医院预约挂号系统,挂号的话专家号很多人抢,这是一个高并发的问题,我以前针对专家号系统的解决方案就是直接在数据库MySQL上面加锁,简单有效,完美完成任务,但是这是针对并发量很少的情况,最近在思考,如果并发量很大的话,我的专家号系统模块应该怎么办呢?专家号系统模块需要解决的问题:1.瞬间高并发(很... 阅读详情

        前段时间一直忙着面试、写论文,这段时间稍微空闲下来,写一下做的一个比较有特点的项目,主要是处理高并发的一套流程,主要是相关思路并且会帖出相关代码实现。       

1:项目简单介绍+问题产生原因 

        在研一到研二期间实验室开发小组为某区疾控中心做的一个预约管理系统,这个项目具有以下的一个业务流程:每天的上午九点钟,疾控中心的工作人员会放出一批体检预约号,总量大概在200-300左右,号码有限,且体检通过会获得疾控中心发放的健康证(此证存在用于上岗的硬性要求),于是会导致大量餐饮或者其他第三产业服务者用户蹲点抢号,造成了一个短时间的高并发场景,一方面是对于用户的响应不及时,影响用户使用体验,一方面大量请求集中打在数据库上,对于数据库也造成了一定的压力,于是我们开发了一套先消费的处理逻辑解决这个问题。

2:解决流程思路分享

2.1: 总体流程思路

        具体流程如下,在疾控中心的操作人员发放预约号时,会同时将这一批预约号信息(包括预约时间、预约号库存等信息)放入到redis缓存中,用户调用取号接口时,首先通过redis分布式锁进行互斥访问缓存中的预约号信息,成功获取到库存号的用户才允许发送消费消息到rabbitMQ(实质上是发送自己的相关信息、预约号的相关信息整合到一个对象类,在数据库中生成一条预约记录),成功发送消息到消息队列上的用户,可以立即返回消费成功的提示,以此减少用户响应时间,同时进行了一个流量削峰的操作,缓解了数据库压力。

2.2:方案存在的问题和解决方案

        (1)redis分布式锁取库存号实现代码

        首先是上redis分布式锁,以下代码都是逻辑简单表示代码,不是项目中具体使用的代码,可便于大家理解。

        上锁之后执行具体的取库存操作以及库存--,上面代码设计了过期时间10s,但是一般会在10s内自动解锁。解锁操作也是原子性的,具体使用rua脚本的解锁命令如下

String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";

RedisScript<Long> redisScript = new DefaultRedisScript<>(script, Long.class);

Long result = redisTemplate.execute(redisScript, Collections.singletonList(key), value);

分布式锁的具体实现网上有很多代码案例,大家可以取一种自己理解的方案进行具体实施。

        (2)发送消息后确保消息不会丢失且能被正确消费

        这一步主要是分为三个阶段,即用户发送消息到消息队列失败的问题、消息在消息队列上丢失问题以及消息消费失败的问题。

        首先是消息发送问题,用户拿到库存后发送消息到消息队列上会有两个回调函数,即returnCallback和confirmCallback函数,结合使用可以判断消息是否成功发送到具体的队列上,同时对于消息从拿库存到发送消息这一个过程的方法做一个事务处理,保证消息发送失败后库存能恢复,若消息成功发送到队列上,可马上返回用户预约成功提示。

        其次是消息在消息队列上的问题,存在消息队列可能宕机导致消息丢失和消息本身没做持久化的话即使消息队列重启也会丢失这两个问题,对于第一个问题我们声明一个持久化的消息队列,即声明队列时durable设置为true,同时发送的消息的delivery_mode 设置为2,表示此消息也是持久化消息,需要写入磁盘。

        最后是消息消费失败问题,针对这一问题,在消息监听处理方法中,我们使用一个try catch把具体的消费操作(实质上就是在数据库中插入一条预约记录)环绕,同时消费后使用chanel.basicAck()方法告知消息队列本条消息消费成功,如果在消费过程中产生了异常或者别的问题,我们可以捕获这个异常,并且在其中使用chanek.basicNack()方法进行消息的重新入队,重新消费操作。

        除上述问题外,还存在消息一致性的问题,即保证我们的消息只被消费一次,针对这个问题我们可以在消息头部取得消息的唯一标识id,每次消费前先判断该消息唯一标识id是否已存在,若已存在则拒绝消费,不存在则进行消费,消费成功后将此唯一标识id放入hashSet中存入redis,上述的判断则是在redis中拿到这个hashSet判断是否已存在此消息唯一标识id。

实战经验:如何用提示系统优化医院预约挂号流程? 不知道挂什么科:小张又发烧又咳嗽,纠结是挂「发热门诊」还是「呼吸内科」,翻医院官网半小时没理清;填信息填到吐:好不容易选了科,要填姓名、身份证、手机号、症状、过敏史…填到一半电话响了,回来又得重新填;客服等得急死人:填错了「过敏史」想修改,打客服电话等了15分钟,接通后客服说「得重新提交」,小张直接崩溃:「我都快烧晕了,能不能简单点?提示系统:AI的「服务手册」,告诉AI「遇到什么情况该做什么」;意图识别:AI听懂用户「想做什么」,比如「我发烧了」是「预约挂号」;多轮对话。 阅读详情

相关推荐

基于Web的医院预约挂号系统设计与实现

随着医疗信息化建设的不断推进,传统的人工挂号方式已无法满足现代医院高效、便捷的服务需求。基于Web的医院预约挂号系统作为智慧医疗的重要组成部分,能够有效缓解患者排队压力、优化医疗资源配置、提升医院管理效率。本章从系统建设背景出发,深入剖析患者、医生与管理员三类角色的核心诉求,梳理现有流程中号源不透明、预约冲突频发、数据安全薄弱等痛点,明确系统设计目标与基本原则。结合实际业务场景,完成功能性需求(如在线预约、排班管理、权限控制)与非功能性需求(如高并发处理、数据加密传输、系统可维护性)的全面分析。

weixin_31620365的博客 920

解决高并发-springboot-redis-mysql医院预约系统项目超详细讲解--半个小时教你如何使用springboot完成预约项目-----第六章:查看我的预约,预约界面显示

之前说过把患者预约的的时间当作字段,医生当作字段的值放入hash(患者表中) 现在我们取出来 dao层 RedisDaoImpl @Override public Map<Object, Object> hashGetAll(String key) { return redisTemplate.opsForHash().entries(key); } service层 BookingServiceImpl新增一个方法 由于顺序是按添加顺序,我们需要给l

zhhhhhh1213的博客 630

100讲带你实战基于Redis的高并发预约抢购系统.zip

100讲带你实战基于Redis的高并发预约抢购系统

Day264.百万流量电商网站商品详情页系统架构的整体设计 -Redis的高并发预约抢购系统

百万流量大型电商网站商品详情页系统架构的整体设计 1、案例背景及相关业务知识介绍 现代社会网购已经成为我们生活的一部分,即使你很少网购,你也一定会因为家眷的网购需求而有所支出。所以你也一定对下面这种页面司空见惯,如图所示: 你一定会觉得,“这有啥?不就是个展示商品的页面吗?” 但请注意就这一张小小的页面,包含的数据信息可以说是极为丰富的。如图所示: 图中我用不同颜色将图划分了一些区域,每一块区域都代表了在这个商品展示页面里的一块数据维度: **蓝色 **代表商家信息的数据维度,包括:商家名称,商家评分

阿昌爱Java 1063

高并发系统设计思路

高并发系统设计思路

SimpleFOC STM32实战:基于F103与HAL库,剖析速度环与电流环的协同控制

本文详细介绍了基于STM32F103与HAL库的SimpleFOC实战应用,重点剖析速度闭环控制与电流环的协同工作原理。通过开发环境搭建、参数调试技巧及性能优化方案,帮助开发者高效实现无刷电机精准控制,适用于机器人、无人机等高精度应用场景。

weixin_29170327的博客 476

044_基于python的医院预约挂号系统

博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web开发与学生毕业设计实战指导,与高校教育者/资深讲师/行业专家深度对话🤝。

2301_76419561的博客 859

踩坑记录:服务商模式下微信小程序支付,为什么必须用子商户的AppID获取openid?

本文深入解析了服务商模式下微信小程序支付必须使用子商户AppID获取openid的技术原因,详细对比了服务商模式与直连模式的关键差异,并提供了正确的配置指南和常见问题解决方案,帮助开发者避免微信支付集成中的常见陷阱。

weixin_28318011的博客 548

若依框架实战:构建医院预约挂号系统全过程

这是最复杂的部分,要支持按日、按周设置医生的坐诊时间。考虑到医疗行业的特殊性,权限控制要做得特别细致,比如医生只能看到自己科室的信息,管理员可以查看全院数据。利用若依集成的ECharts组件,我们做了几个关键指标的统计:每日预约量、科室热门度、医生接诊量等。这个项目用到了若依的很多核心功能,特别是权限管理和日志模块在医疗场景下的特殊应用,感觉挺有参考价值的。医疗系统要求记录详细的操作日志,我们扩展了若依的日志模块,特别增加了敏感操作二次确认和操作内容详细记录的功能,完全符合医疗信息系统安全规范。

AmberLeopard26的博客 762

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)

目录 一、ATK-LORA-01无线串口资料 二、代码移植 1.分析 (1)usart3(也可以是其他的串口)用于接收数据的串口 usart.h (2)time3(也可以是其他的定时器)用于时序的设置 (3)lora.c 三、演示 1.主机(发送方) (1)主机接线 (2)主机代码(发送方) (3)主机实物 插上无线串口通电即可发送​ 2.从机(接收方) (1)从机接线(LORA与主机相同) (2)从机代码(接收方) (3)从机实物 接上TTL和LORA并通电即...

m0_56942354的博客 8964

B-Tree数据存储

SQLITE数据存储1. B-Tree的优势  在SQLite中数据库、表、索引都是通过B-Tree和B+Tree的形式进行存储的。如果采用传统的二叉树查找树、红黑树的查找深度一般为log2(N) \log{_2}(N)(其中N表示的是整个树的关键字的数目),在数据库中如果存储的资源过多,就会导致查找一个数据过程中出现较多的磁盘I/O操作,而过多的磁盘操作就会导致整个查找的效率较低,而基于二叉树的一

Promiscuous_youth的博客 1141

125_基于springboot的医院门诊智能预约平台

博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web开发与学生毕业设计实战指导,与高校教育者/资深讲师/行业专家深度对话🤝。

2301_76419561的博客 986

桌面云架构讲解(VDI、IDV、VOI/TCI、RDS)

什么是云桌面桌面云是虚拟化技术成熟后发展起来的一种应用,桌面云通常也称为云桌面、VDI等桌面云中的云一般指的是企业的数据中心,通过在数据中心的服务器上安装若干个虚拟机,这个虚拟机就是桌面;但是终端无法直接连接到这个虚拟机(云桌面),因此就需要通过技术将就虚拟机变为桌面云发放出来;发放出来之后只需要瘦客户端(PC、手机、瘦客户机等)连接到数据中心的云桌面服务器平台,最终就可以连接到桌面来进行使用云桌面的优势终端与数据信息分离,数据在后台集中处理和存储 ,数据实现统一管理。

m0_49864110的博客 3万+

085_基于springboot的仁康医院预约挂号系统

博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web开发与学生毕业设计实战指导,与高校教育者/资深讲师/行业专家深度对话🤝。

2301_76419561的博客 871

使用再生龙还原镜像文件到硬盘

1. 把制作好的再生龙光盘插入需要的电脑,开机按F4使用再生龙启动2. 选择默认的:Clonezailla live(Default settings,VGA 800*600),然后等待几分钟 3. 选择语言:简体中文 4. 选择不修改键盘映射 5. 选择使用再生龙          6. 选择硬盘/分区(存到/来自)镜像文件,此选项既可以制作镜像,也可以恢复镜像。 7. 使用本机的分区     ...

weixin_42168893的博客 1万+

COCOS 3.8 接入高德定位SDK

/微信登录所必须的code。//是否获得code。

八喜互动 1992

基于Java+SpringBoot的医院预约挂号管理系统(毕业设计源码+lw文档)

当前医院预约挂号管理面临三大核心痛点:一是患者挂号流程繁琐,传统窗口挂号需现场排队,线上平台多存在号源更新不及时、科室医生信息模糊(如擅长领域、出诊时间)等问题,患者难精准匹配就医需求,易出现 “挂错号”“跑空趟”;二是医院号源与排班管理低效,医生出诊计划调整(如临时停诊、加诊)难实时同步至挂号渠道,号源分配缺乏动态优化(如热门科室号源紧张、普通科室号源闲置),人工统计挂号数据耗时久,难支撑就医高峰调度;三是医患衔接薄弱,患者挂号后缺乏就诊前指引(如就诊时间、所需材料、科室位置),医生难提前获取患者基础病情

博主自己就是程序员、避免中介对接,从事软件开发多年,累计开发或辅导多名同学, 有丰富的项目开发和文档编写经验、同学们有任何项目问题都可以联系我~ 741

【ArcGIS微课1000例】0118:一文讲清楚tif(geotiff)栅格数据格式

TIFF(Tagged Image File Format)是一种常见的图像文件格式,它被广泛用于存储和传输各种类型的图像数据。图像存储:TIFF格式可以存储多通道的位图图像,包括灰度图、彩色图和透明度图等。它支持不同的像素深度,可以是8位、16位、24位或32位等。因此,TIFF格式非常适合存储高质量的图像数据,包括照片、卫星图像、医学影像等。无损压缩:TIFF格式支持无损压缩,这意味着图像可以被压缩而无需损失任何像素信息。这种压缩方式可以减小文件大小,而不会降低图像的质量。

智慧空间实验室 2816

2026毕设-基于Python的郑州医院预约挂号系统的设计与实现

摘要:本文介绍了一个面向郑州医院开发的预约挂号系统,旨在解决传统挂号模式效率低、资源分配不均等问题。系统基于Python+Django+Vue技术栈开发,提供用户端预约挂号、医院端号源管理和管理端数据分析等功能。该系统的应用将优化患者就医体验,提高医院运营效率,促进医疗资源合理配置,推动医疗服务智能化升级。系统支持多终端操作,实现从预约到就诊的全流程数字化管理,为缓解郑州市"就医难"问题提供技术解决方案。

hungelianshu123的博客 860

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

微信小程序的医院预约挂号系统 就诊 医生排班

微信小程序医院预约挂号系统通过数字化手段优化传统挂号流程,提升患者就医体验。系统整合医院资源,实现线上预约、医生排班查询、科室选择等功能,减少现场排队时间。

qq840612233的博客 1104

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

微信小程序在医院体检预约系统中的应用与实践

医疗信息化建设中,预约管理系统是提升医院服务效率的关键组件。传统预约方式存在效率低下、资源调配不透明等问题,而基于微信小程序的解决方案通过其无需安装、开发成本低的特性,成为优化医疗服务的有效途径。技术实现上,采用Redis集群处理高并发预约请求,结合分包加载和WebP图片优化提升小程序性能,同时通过接口签名验证和敏感数据加密确保系统安全。这种方案在某三甲医院应用中,使日均预约量提升78%,错误率下降94%,显著改善了患者体验和科室利用率。医疗类小程序的开发还需特别注意符合《互联网诊疗管理办法》等法规要求。

weixin_27210125的博客 250

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

基于SpringBoot医院挂号预约与智能排班系统开题报告

本文提出基于SpringBoot框架开发医院挂号预约与智能排班系统,旨在解决传统人工管理模式存在的效率低下、排班不科学、资源调配失衡等问题。系统采用模块化设计,包含患者线上挂号预约、医生出诊管理、智能化排班调度等功能模块,实现就医流程线上化和排班管理数据化。通过构建多维数据分析体系,系统可优化医疗资源配置,提升医院运营效率。研究采用B/S架构,结合SpringBoot的技术优势,为中小型医院提供轻量化、低成本、高适配的数字化解决方案,推动医院服务向智能化、精细化转型。系统具有便民服务、医院运营和技术实践三重

G3259093417的博客 250

【开题答辩全过程】以 基于Node.js的医院预约挂号系统为例,包含答辩的问题和答案

本文介绍了一位具有14年经验的毕设指导专家,擅长Java、PHP等多种开发语言。以"基于Node.js的医院预约挂号系统"为例,展示了毕业答辩的全过程,包括技术选型理由、核心功能实现方案及评委提问要点。系统采用Node.js+Express+Vue技术栈,包含预约挂号、支付退款、药品管理等模块,重点解决了并发预约控制问题。文中提供了完整的答辩问答记录,并建议学生独立完成毕设,同时表示可提供开题报告参考、源码支持等服务。评委认为该设计方案可行,技术实现合理,最终开题获得通过。

shiji5078的博客 395

医院预约挂号|基于springboot + vue医院预约挂号系统(源码+数据库+文档)

本文介绍了一个基于SpringBoot+Vue的医院预约挂号系统开发项目。系统采用前后端分离架构,后端使用SpringBoot框架简化企业级开发,前端采用Vue.js实现响应式界面,数据库选用MySQL存储数据。文章详细说明了系统设计原则、技术选型、功能演示等内容,并提供了代码示例和测试用例参考。该项目具备完整的用户登录验证、安全防护等功能,适合作为计算机专业毕业设计选题。文末附有源码获取方式和更多毕设选题推荐。

伟庭的博客 384

计算机毕业设计springboot医院挂号系统 基于SpringBoot的智慧医院预约诊疗平台 SpringBoot+Vue构建的互联网医院门诊挂号服务系统

摘要:本文介绍了一个基于SpringBoot+Vue+MySQL的医院挂号系统毕业设计方案。系统采用B/S架构,实现了挂号、咨询、排班、复诊等核心功能模块,支持患者、医生、专家和管理员多角色协同操作。系统包含六大角色视角,提供完整的业务流程解决方案,包括在线挂号、支付、评价等功能,有效解决传统医院排队问题。开发环境为IDEA/Eclipse+MySQL+JDK1.8+Tomcat,系统架构清晰,数据库设计完善,界面友好。该设计将线下医疗流程数字化,体现了"互联网+医疗"的创新理念,具有较

毕设源码_严学姐 1003

实时手机检测-通用模型医院预约系统应用案例

本文介绍了如何在星图GPU平台上一键自动化部署“实时手机检测-通用”镜像,实现医院预约系统中的智能身份核验。该方案通过实时视频流检测手机状态与用户交互行为,有效识别代预约、机器抢号等场景,提升预约公平性与效率,减轻医护人员审核负担。

weixin_27645199的博客 32
上一篇: 从0开始下载Anaconda配置环境安装cuda和pytorch
下一篇: 聚簇索引和非聚簇索引
coderrrrrr
博客等级 码龄7年 153粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值