本发明涉及高并发场景处理技术领域,尤其涉及一种领取优惠券的方法及系统。
背景技术:
随着商品经济的发展以及市场竞争的日趋激烈,对于客户的争夺也日趋重要,因此催生了专门用于吸引顾客的优惠券。所谓优惠券,是指可以作为现金抵扣加入到消费金额中,或者可以随顾客的消费行为提供一定的消费权益的折扣信息。
由于是限时推广活动,活动开始的短时间内,会有大量的请求涌入平台,若平台没有良好的并发设计,会导致平台连接数过高、数据库负载压力过大,接口响应缓慢,甚至系统瘫痪,优惠券超发的情况,若活动流程还对接了第三方平台的接口,也会导致大量请求瞬间涌入第三方系统,引起第三方系统负载过高、接口请求中断等问题;例如中国专利cn108090058a公开了一种高并发活动交互方法,采用了基于分布式缓存memcached具有原子特性的令牌锁机制,通过平台提前的预占锁位的机制,执行抢购逻辑,实现请求执行重复的信息查询和抢购操作,但此方法当内容容量达到指定值之后,算法自动删除不使用的缓存,存在一定的风险,在一些特殊情况下也会造成优惠券超发的情况发生。
技术实现要素:
本发明的目的是提供高并发场景下的优惠券领取系统设计,通过领取优惠券的操作投递到分布式消息队列rocketmq中,实现对优惠券的锁定,避免优惠券的超发现象。
为了实现上述目的,本发明提供以下技术方案:
本发明提供高并发场景下的优惠券领取系统,领取系统包括显示单元、消息单元和分布式锁单元,所述分布式锁单元包括校验模块和优惠券处理模块,校验模块包括第一校验组和第二校验组;用户进入所述显示单元,将用户领取优惠券的请求消息投递给所述消息单元,所述消息单元封装投递到分布式消息队列rocketmq集群的方法,即把请求消息投递到消息单元的消息中间件中,所述分布式消息队列rocketmq集群调用领取优惠券接口并监听所述分布式锁单元,所述分布式锁单元的一个线程抢占成功,同一时刻其他线程处于阻塞和等待状态,所述第一校验组进行校验,如果第一校验结果为是则进行第二校验组,如果第一校验结果为否则该线程执行结束,锁将释放,其他线程继续抢占;所述第二校验组的第二校验结果为是则该线程执行结束,锁将释放,其他线程继续抢占,如果第二校验结果为否则进入所述优惠券处理模块,所述优惠券处理模块完成后,优惠券领取成功,该线程执行结束,锁将释放,其他线程继续抢占,直至优惠券余额为零;如果优惠券在临近到期时,所述消息单元发送消息到所述显示单元短信提醒用户使用该优惠券。
进一步地,所述显示单元用于用户与系统之间的交互,用于用户登入和显示消息提醒。
进一步地,所述第一校验组用于校验用户的优惠券剩余量是否大于零,所述第一校验组查询优惠券存放的第一数据库,从所述第一数据库中查询优惠券发放的剩余量。
进一步地,所述第二校验组用于校验用户是否领取过优惠券,所述第二校验组调用领券记录的第二数据库,从所述第二数据库中查询该用户是否已领过该优惠券。
进一步地,所述优惠券处理模块用于处理优惠券领取和优惠券扣除。
进一步地,所述分布式消息队列rocketmq集群监听调用所述优惠券处理模块的服务方法。
进一步地,所述分布式消息队列中的延时队列在优惠券领后,短信提醒用户使用优惠券;
进一步地,一种高并发场景下的优惠券领取设计方法,并包括以下步骤:
(1)用户登入领取优惠券页面;
(2)用户领取优惠券请求投递到消息中间件;
(3)分布式消息队列rocketmq集群监听消息;
(4)校验优惠券剩余量是否>0;
(5)校验用户是否已领取过优惠券;
(6)领取优惠券并扣减优惠券库存;
(7)优惠券领取成功。
进一步地,一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时能够实现上述任一项所述的一种高并发场景下的优惠券领取系统设计方法。
进一步地,一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时能够实现上述任一项所述的一种高并发场景下的优惠券领取系统设计方法。
本发明有益效果如下:(1)本发明基于分布式消息队列能够保证严格的消息顺序,可以有效避免大流量环境下大量的请求执行重复的信息查询和抢购操作;(2)本发明通过利用分布式锁,将优惠券锁定解决了活动商品超发的问题;(3)本发明的分布式消息队列具有消息读写并发能力,使优惠券领取的效率提高。
附图说明
图1是本发明单元示意图。
图2是本发明分布式锁单元示意图。
图3是本发明的优惠券设计流程图。
图4是存储器中所加载的计算机程序的逻辑图。
具体实施方式
以下结合附图对本发明的具体实施方式做详细描述,应当指出的是,实施例只是对本发明的具体阐述,不应视为对本发明的限定,实施例的目的是为了让本领域技术人员更好地理解和再现本发明的技术方案,本发明的保护范围仍应当以权利要求书所限定的范围为准。
下面结合附图与具体实施方式对本发明做进一步的描述:
如图1-2所示,本发明提供一种高并发场景下的优惠券领取系统,领取系统包括显示单元1、消息单元2和分布式锁单元3,所述分布式锁单元3所述分布式锁单元包括校验模块31和优惠券处理模块32,校验模块31包括第一校验组311和第二校验组312;用户进入所述显示单元1,将用户领取优惠券的请求消息投递给所述消息单元2,所述消息单元2封装投递到分布式消息队列rocketmq集群的方法,即把请求消息投递到消息单元2的消息中间件中,所述分布式消息队列rocketmq集群调用领取优惠券接口并监听所述分布式锁单元3,所述分布式锁单元3的一个线程抢占成功,同一时刻其他线程处于阻塞和等待状态,所述第一校验组311进行校验,如果第一校验结果为是则进行第二校验组312,如果第一校验结果为否则该线程执行结束,锁将释放,其他线程继续抢占;第二校验组312的第二校验结果为是则该线程执行结束,锁将释放,其他线程继续抢占,如果第二校验结果为否则进入所述优惠券处理模块32,所述优惠券处理模块32完成后,优惠券领取成功,该线程执行结束,锁将释放,其他线程继续抢占,直至优惠券余额为零;如果优惠券在临近到期时,所述消息单元1发送消息到所述显示单元短信提醒用户使用该优惠券。
进一步地,所述显示单元1用于用户与系统之间的交互,用于用户登入和显示消息提醒。
进一步地,所述第一校验组311用于校验用户的优惠券剩余量是否大于零,所述第一校验组311查询优惠券存放的第一数据库,从所述第一数据库中查询优惠券发放的剩余量。
进一步地,所述第二校验组312用于校验用户是否领取过优惠券,所述第二校验组312调用领券记录的第二数据库,从所述第二数据库中查询该用户是否已领过该优惠券。
进一步地,所述优惠券处理模块32用于处理优惠券领取和优惠券扣除。
进一步地,所述分布式消息队列rocketmq集群监听调用所述优惠券处理模块的服务方法。
进一步地,所述分布式消息队列中的延时队列在优惠券领后,短信提醒用户使用优惠券;
如图3所示,一种高并发场景下的优惠券领取设计方法,并包括以下步骤:
(1)用户登入领取优惠券页面;
(2)用户领取优惠券请求投递到消息中间件;
(3)分布式消息队列rocketmq集群监听消息;
(4)校验优惠券剩余量是否>0;
(5)校验用户是否已领取过优惠券;
(6)领取优惠券并扣减优惠券库存;
(7)优惠券领取成功。
进一步地,一种计算机设备10,包括存储器11、处理器12以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时能够实现上述任一项所述的一种高并发场景下的优惠券领取系统设计方法。
如图4所示,一种计算机可读存储介质20,其上存储有计算机程序,所述计算机程序被处理器执行时能够实现上述任一项所述的一种高并发场景下的优惠券领取系统设计方法。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。