一种处理高并发秒杀活动的方法与流程

文档序号:17320883发布日期:2019-04-05 21:32阅读:1742来源:国知局
一种处理高并发秒杀活动的方法与流程

本发明涉及计算机技术及软件领域,尤其涉及一种处理高并发秒杀活动的方法。



背景技术:

高并发是目前电商网站常见的营销手段,当大量用户同一时间同时进行抢购时,会导致网站瞬间的并发量非常大,进而使得业务逻辑非常简单的秒杀活动在技术层面上面临着巨大的考验。而最大的瓶颈在于数据库的io操作,数据处理并发的能力有限,在应对大量并发请求时,数据库无法支撑巨大的压力。



技术实现要素:

本发明的目的在于针对背景技术中的缺陷,提出一种处理高并发秒杀活动的方法,通过使用redis缓存和rabbitmq消息队列,来减少对数据库的访问,从而减轻数据库的压力,实现系统对高并发的支持。

为达此目的,本发明采用以下技术方案:

一种处理高并发秒杀活动的方法,具体步骤如下:

步骤一:在高并发系统进行初始化的时候,从数据库中查询出秒杀活动的数据,并加载到redis缓存中;

步骤二:进行内存标记,选择性响应秒杀请求并发;

步骤三:预减库存,当高并发系统收到秒杀请求时,减少redis缓存中秒杀活动的数据,当秒杀活动的数据量减少到0时,直接返回秒杀结束的信息;

步骤四:高并发系统判断商品是否已经秒杀成功,若是,则返回不能重复秒杀的信息;若不是,则将秒杀请求进入rabbitmq消息队列,进行异步下单,并立即返回秒杀活动的排队队列中;

步骤五:秒杀请求从rabbitmq消息队列中出来,并生成商品订单并更新秒杀活动的数据。

优选的,在所述步骤一中,高并发系统初始化时,将秒杀活动的数据,加载到redis缓存中,秒杀活动数据包括但不限于秒杀商品的库存数据,秒杀请求直接访问redis缓存但不访问数据库。

优选的,在所述步骤二中,存在大量的秒杀请求并发时,高并发系统选择部分秒杀请求并发进行响应,对于没有响应的秒杀请求并发,返回秒杀失败的信息。

优选的,在所述步骤三中,高并发系统收到秒杀请求时,首先减少redis缓存中的秒杀活动数据,秒杀活动数据包括但不限于秒杀商品的库存数据,当redis缓存中的秒杀活动数据减少至0时,将秒杀活动的数据同步到数据库中,并返回秒杀结束的信息。

优选的,在所述步骤四中,使用rabbitmq消息队列进行异步下单,当redis缓存中的秒杀活动数据减少至0时,秒杀请求进入rabbitmq消息队列,并返回秒杀活动的排队队列中。

有益效果:

1、使用redis缓存和rabbitmq消息队列,减少对数据库的访问,从而减轻数据库压力,实现系统对高并发的支持;

2、通过将redis缓存中的数据同步到数据库中,保证数据的正确性,并减少对redis缓存的访问;

3、通过rabbitmq消息队列同步数据到数据库,不直接更新数据库,并立即返回用户信息,无须等待数据库处理完成后再返回处理结果,极大提升用户体验度。

附图说明

图1是本发明的流程图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。

本实施例的一种处理高并发秒杀活动的方法,具体步骤如下:

如图1中的s1所示,步骤一:在高并发系统进行初始化的时候,从数据库中查询出秒杀活动的数据,并加载到redis缓存中;在所述步骤一中,高并发系统初始化时,将秒杀活动的数据,加载到redis缓存中,秒杀活动数据包括但不限于秒杀商品的库存数据,秒杀请求直接访问redis缓存但不访问数据库。

在初始化的时候,将秒杀活动的数据加载到redis缓存中,但不是全部的秒杀活动的数据,在本实施例中,秒杀活动的数据包括但不限于秒杀商品的库存数据,由于redis缓存的运算速度比数据库快,因此秒杀请求可以直接访问redis缓存并进行库存的判断等操作,秒杀请求并不会去访问数据库,从而极大提升高并发系统的并发性能,减少对数据库的访问,减轻数据库的压力。

如图1中的s2所示,步骤二:进行内存标记,选择性响应秒杀请求并发;在所述步骤二中,存在大量的秒杀请求并发时,高并发系统选择部分秒杀请求并发进行响应,对于没有响应的秒杀请求并发,返回秒杀失败的信息。

通过判断商品是否已经秒杀结束,来减少对redis的访问,过滤掉后续无用的秒杀请求,例如例如10个商品已经秒杀结束,后续所有请求将直接返回秒杀失败,不再进行后续操作,减少对网络的开销,同时并不是所有的秒杀请求并发,高并发系统都会一一响应,只会选择性的响应一部分,对于其他不响应的秒杀请求并发,则会返回秒杀失败的信息,大大减少了对redis缓存的访问。

如图1中的s3所示,步骤三:预减库存,当高并发系统收到秒杀请求时,减少redis缓存中秒杀活动的数据,当秒杀活动的数据量减少到0时,直接返回秒杀结束的信息;在所述步骤三中,高并发系统收到秒杀请求时,首先减少redis缓存中的秒杀活动数据,秒杀活动数据包括但不限于秒杀商品的库存数据,当redis缓存中的秒杀活动数据减少至0时,将秒杀活动的数据同步到数据库中,并返回秒杀结束的信息。

当高并发系统受到秒杀请求后,是先减少redis缓存中的秒杀活动的数据,在本实施例中,秒杀活动的数据包括秒杀商品的库存数据,当库存数据减少到0时,redis缓存将数据同步到数据库中,保证实际数据在数据库中,而不能保存在redis缓存中,但由于数据库运算速度太慢,支持不了秒杀活动,因此选择将秒杀活动在redis缓存中进行,后续再将数据同步到数据库中。

如图1中的s4所示,步骤四:高并发系统判断商品是否已经秒杀成功,若是,则返回不能重复秒杀的信息;若不是,则将秒杀请求进入rabbitmq消息队列,进行异步下单,并立即返回秒杀活动的排队队列中;在所述步骤四中,使用rabbitmq消息队列进行异步下单,当redis缓存中的秒杀活动数据减少至0时,秒杀请求进入rabbitmq消息队列,并返回秒杀活动的排队队列中。

在步骤三中,由于当redis缓存中的秒杀活动数据减少到0时,会将数据同步到数据库中,便是采用步骤四的rabbitmq消息队列进行同步,使用rabbitmq消息队列进行异步下单,当redis缓存的库存数据扣减成功后,秒杀请求进入rabbitmq消息队列,返回前端排队中,而不是直接更新数据库的操作。此做法的优点在于用户点击秒杀按钮后能立即收到响应,然后再进行数据库读写操作,而无须等待数据库处理完成后再返回处理结果,极大提升用户体验度。

如图1中的s5所示,步骤五:秒杀请求从rabbitmq消息队列中出来,并生成商品订单并更新秒杀活动的数据。同时的,由于rabbitmq消息队列同步数据到数据库需要时间,因此采用异步下单的方式,即用户看到秒杀成功的提升后,但是在订单中却看不到该秒杀成功的订单,要过一段时间,等rabbitmq消息队列同步数据成功后,才能看到订单。

以上结合具体实施例描述了本发明的技术原理。这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1