一种基于Swoole框架的秒杀方法及系统
文献发布时间:2023-06-19 11:22:42
技术领域
本发明涉及网络开发技术领域,具体来说,涉及一种基于Swoole框架的秒杀方法及系统。
背景技术
随着电商的普及,在互联网平台购物已经成为了一种常见的现象,秒杀是一种以促销为目的的网上限时抢购的活动,允许多人实时在线抢购商品。目前主流的秒杀架构是“浏览器-站点-服务-数据”的模式,当大量的用户涌入站点时,网站的业务受到了大量并发的考验,而数据库的IO操作能力对于高并发量的数据请求操作时非常有限,因而这种操作存在技术瓶颈,因此很多系统会使用到消费队列来进行削锋异步处理来提高系统的性能,这样降低了系统的耦合性,但同时该系统的复杂性的增加和可用性的降低带来了数据传输的可靠性和一致性问题,因此如何正确有效地处理队列消费的数据结果是一个技术瓶颈。
发明内容
为解决现有技术中存在的问题,本发明提供一种基于Swoole框架的秒杀方法及系统,采用MicroSoft公司提供的OpenXml插件,基于Swoole框架的高性能异步并发协程的秒杀服务系统同时通过使用redis队列和memcached缓存技术来过滤掉大量请求数据,从而减少数据层的请求压力。
为实现上述目的,本发明采用的技术方案是:一种基于Swoole框架的秒杀方法,包括以下步骤:
S1、授权用户进入秒杀页面并缓存用户信息;
S2、接受用户下单秒杀请求,检查用户秒杀memcached缓存,判断是否有缓存,如果是,将缓存中的秒杀结果返回给用户,如果否,则再查看库存,如果商品库存数量减去用户秒杀时秒杀库存小于0则返回,秒杀结束;
S3、将秒杀数据打入redis队列进行消费;
S4、等待消费结果,在延时后重新请求处理结果;
S5、获得处理结果后将处理结果同步返回给用户;
S6、创建消费服务,消费服务后检查商品库存,判断是否消费成功,如果是,进行下单处理,如果否,则将秒杀失败的信息记录至用户秒杀memcached缓存中,秒杀结束。
在本技术方案中,检查用户秒杀memcached缓存进行加锁,目的是防止用户重复点击,进入到一个队列中;如果是,则代表用户对商品进行了秒杀下单;同一个商品,如果用户购买过,那么会在memcached缓存,就不再允许对此商品进行二次购买;将秒杀数据打入redis队列进行消费,滤掉大量请求数据,打入redis队列是因为redis读写很快,而不是通过接口请求来优化写入数据;创建消费服务,该服务的任务为不断地处理redis队列。该服务使用到了异步redis消费方式,即每一次的处理结果不会影响到下一次进行处理。客户端的处理和服务端的处理中,客户端是端口,服务端是服务模式,可以一直定时处理。
在进一步的技术方案中,步骤S1包括:用户第一次授权进入秒杀页面时,将用户的地址信息记录至memcached缓存中。
在本技术方案中,在memcached缓存,就不再允许对此商品进行二次购买。
在进一步的技术方案中,步骤S2包括:根据用户秒杀memcached缓存是否有缓存判断用户是否对商品进行了秒杀下单。
在本技术方案中,用户端接受用户下单秒杀请求,首先检查用户秒杀memcached缓存,防止用户重复点击;如果有缓存则代表用户对商品进行了秒杀下单,将缓存中的秒杀结果返回给用户,否则再查看库存,如果减去时秒杀库存小于0则返回秒杀结束。
在进一步的技术方案中,步骤S3包括:所述秒杀数据为用户发起秒杀的申请数据;将秒杀数据打入redis队列进行消费后并存储至redis队列。
在本技术方案中,不断地处理redis队列,每一次的处理结果不会影响到下一次进行处理。消费后检查商品库存,如果消费成功则进行下单处理,否则将秒杀失败的信息记录至用户秒杀memcached缓存中。
在进一步的技术方案中,步骤S4包括:延时时间为2s。
在本技术方案中,用户端进行等待,在延时2s后重新请求,获得处理结果后将结果同步返回给用户,接口进行延时请求,设置接口延时多在2s。
在进一步的技术方案中,步骤S5包括:同步返回给用户后进行对比。
在本技术方案中,将商品信息和库存提前加入memcached缓存中。
在进一步的技术方案中,步骤S6包括:消费服务使用异步redis的消费方式。
在本技术方案中,服务使用到了异步redis消费方式,即每一次的处理结果不会影响到下一次进行处理。
本发明还提供了一种基于Swoole框架的秒杀系统,系统包括用户模块和服务模块,其中:
用户模块,用于授权用户进入秒杀页面并缓存用户信息,用于接受用户下单秒杀请求;
服务模块,用于处理大量用户秒杀请求,过滤掉不符合条件的请求,同时处理小部分秒杀成功的请求并进行下单处理。
本技术方案的原理为:用户模块用于使用缓存数据向用户展示各种商品信息以及秒杀活动的入口或者秒杀结果;服务模块用于处理大量用户秒杀请求,过滤掉大量不符合条件的请求,同时处理小部分秒杀成功的请求并进行下单处理。
在进一步的技术方案中,用户模块包括查看商品信息单元和下单参与秒杀单元,其中:
查看商品信息单元,用于接受用户下单秒杀请求,检查用户秒杀memcached缓存,判断是否有缓存,如果是,将缓存中的秒杀结果返回给用户,如果否,则再查看库存,如果商品库存数量减去如果商品库存数量减去用户秒杀时秒杀库存小于0则返回,秒杀结束;
下单参与秒杀单元,用于将秒杀数据打入redis队列进行消费。
在本技术方案中,使用缓存,加快了接口访问速率,优化了用户端的用户使用体验。
在进一步的技术方案中,服务模块包括Swoole服务运行单元、异步redis队列处理单元和memcached信息缓存单元,其中:
Swoole服务运行单元,用于等待消费结果,在延时后重新请求处理结果;
异步redis队列处理单元,用于获得处理结果后将处理结果同步返回给用户;
memcached信息缓存单元,用于创建消费服务,消费服务后检查商品库存,判断是否消费成功,如果是,进行下单处理,如果否,则将秒杀失败的信息记录至用户秒杀memcached缓存中,秒杀结束。
在本技术方案中,服务层服务器快速地处理了大量用户端的请求,同时减少了数据层服务器的CPU消耗,同时也达到了快速响应用户端请求的目的。本发明的有益效果是:
(1)使用缓存,加快了接口访问速率,优化了用户端的用户使用体验;
(2)服务层服务器快速地处理了大量用户端的请求,减少了数据层服务器的CPU消耗,达到了快速响应用户端请求的目的;
(3)基于Swoole框架的高性能异步并发协程的秒杀服务系统,同时通过使用memcached高速缓存技术和swoole中的异步redis消费队列技术;
(4)能够过滤掉大量请求数据,从而减少数据层的请求压力;
(5)在异步消费队列中存在回调,该回调判断处理结果,如果出现异常则在处理回调中进行数据自动回滚,从而保证了数据传输处理的可靠性。
附图说明
图1是本发明所述的一种基于Swoole框架的秒杀方法的流程图;
图2是本发明所述的一种基于Swoole框架的秒杀系统的结构示意图。
附图标记说明:
10、用户模块;11、服务模块。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例:
如图1所示,本发明提供了一种基于Swoole框架的秒杀方法,包括以下步骤:
S1、授权用户进入秒杀页面并缓存用户信息;
S2、接受用户下单秒杀请求,检查用户秒杀memcached缓存,判断是否有缓存,如果是,将缓存中的秒杀结果返回给用户,如果否,则再查看库存,如果商品库存数量减去用户秒杀时秒杀库存小于0则返回,秒杀结束;
S3、将秒杀数据打入redis队列进行消费;
S4、等待消费结果,在延时后重新请求处理结果;
S5、获得处理结果后将处理结果同步返回给用户;
S6、创建消费服务,消费服务后检查商品库存,判断是否消费成功,如果是,进行下单处理,如果否,则将秒杀失败的信息记录至用户秒杀memcached缓存中,秒杀结束。
在本实施例中,检查用户秒杀memcached缓存进行加锁,目的是防止用户重复点击,进入到一个队列中;如果是,则代表用户对商品进行了秒杀下单;同一个商品,如果用户购买过,那么会在memcached缓存,就不再允许对此商品进行二次购买;将秒杀数据打入redis队列进行消费,滤掉大量请求数据,打入redis队列是因为redis读写很快,而不是通过接口请求来优化写入数据;创建消费服务,该服务的任务为不断地处理redis队列。使用异步redis消费队列的回调处理时,数据是异步消费,因此加快了响应速度;异步队列的回调中加入了回滚机制因此在处理失败时数据没有丢失。回调处理很好地保证了数据的一致性、完整性和可靠性;该服务使用到了异步redis消费方式,即每一次的处理结果不会影响到下一次进行处理。客户端的处理和服务端的处理中,客户端是端口,服务端是服务模式,可以一直定时处理。
在另一个实施例中,步骤S1包括:用户第一次授权进入秒杀页面时,将用户的地址信息记录至memcached缓存中。
在本实施例中,在memcached缓存,就不再允许对此商品进行二次购买。
在另一个实施例中,步骤S2包括:根据用户秒杀memcached缓存是否有缓存判断用户是否对商品进行了秒杀下单。
在本实施例中,用户端接受用户下单秒杀请求,首先检查用户秒杀memcached缓存,防止用户重复点击;如果有缓存则代表用户对商品进行了秒杀下单,将缓存中的秒杀结果返回给用户,否则再查看库存,如果减去时秒杀库存小于0则返回秒杀结束。
在另一个实施例中,步骤S3包括:所述秒杀数据为用户发起秒杀的申请数据;将秒杀数据打入redis队列进行消费后并存储至redis队列。
在本实施例中,不断地处理redis队列,每一次的处理结果不会影响到下一次进行处理。消费后检查商品库存,如果消费成功则进行下单处理,否则将秒杀失败的信息记录至用户秒杀memcached缓存中,使用异步redis消费队列的回调处理时,数据是异步消费,因此加快了响应速度;异步队列的回调中加入了回滚机制因此在处理失败时数据没有丢失。回调处理很好地保证了数据的一致性、完整性和可靠性。
在另一个实施例中,步骤S4包括:延时时间为2s。
在本实施例中,用户端进行等待,在延时2s后重新请求,获得处理结果后将结果同步返回给用户。
在另一个实施例中,步骤S5包括:同步返回给用户后进行对比。
在本实施例中,将商品信息和库存提前加入memcached缓存中。
在另一个实施例中,步骤S6包括:消费服务使用异步redis的消费方式。
在本实施例中,服务使用到了异步redis消费方式,即每一次的处理结果不会影响到下一次进行处理。
本发明还提供了一种基于Swoole框架的秒杀系统,如图2所示,系统包括用户模块和服务模块,其中:
用户模块,用于授权用户进入秒杀页面并缓存用户信息,用于接受用户下单秒杀请求;
服务模块,用于处理大量用户秒杀请求,过滤掉不符合条件的请求,同时处理小部分秒杀成功的请求并进行下单处理。
本实施例的原理为:用户模块用于使用缓存数据向用户展示各种商品信息以及秒杀活动的入口或者秒杀结果;服务模块用于处理大量用户秒杀请求,过滤掉大量不符合条件的请求,同时处理小部分秒杀成功的请求并进行下单处理,服务模块中,swoole服务运行环节用于启动各种自动运行的信息同步程序,如各种信息数据同步的程序,异步redis消费队列处理环节用于消费用户产生的请求,处理失败回滚处理成功则提交,保证当前消费数据的整体一致性和可靠性,memcached信息缓存环节用于消费用户产生的请求处理完之后的场景。缓存用户请求的处理结果,是为了防止用户重复提交请求,从而保证了秒杀商品过程的不可重复性。
在另一个实施例中,用户模块包括查看商品信息单元和下单参与秒杀单元,其中:
查看商品信息单元,用于接受用户下单秒杀请求,检查用户秒杀memcached缓存,判断是否有缓存,如果是,将缓存中的秒杀结果返回给用户,如果否,则再查看库存,如果商品库存数量减去如果商品库存数量减去用户秒杀时秒杀库存小于0则返回,秒杀结束;
下单参与秒杀单元,用于将秒杀数据打入redis队列进行消费。
在本实施例中,使用缓存,加快了接口访问速率,优化了用户端的用户使用体验。
在另一个实施例中,服务模块包括Swoole服务运行单元、异步redis队列处理单元和memcached信息缓存单元,其中:
Swoole服务运行单元,用于等待消费结果,在延时后重新请求处理结果;
异步redis队列处理单元,用于获得处理结果后将处理结果同步返回给用户;
memcached信息缓存单元,用于创建消费服务,消费服务后检查商品库存,判断是否消费成功,如果是,进行下单处理,如果否,则将秒杀失败的信息记录至用户秒杀memcached缓存中,秒杀结束。
在本实施例中,服务层服务器快速地处理了大量用户端的请求,同时减少了数据层服务器的CPU消耗,同时也达到了快速响应用户端请求的目的。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
- 一种基于Swoole框架的秒杀方法及系统
- 一种基于Swoole框架的智能图片合成方法及系统