秒杀系统实现思路

秒杀系统

秒杀系统主要要解决时间问题和库存问题。

1.需求分析

所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。

秒杀商品通常有两种限制:库存限制、时间限制。

需求:

(1)商家提交秒杀商品申请,录入秒杀商品数据,主要包括:商品标题、原价、秒杀价、商品图片、介绍等信息

(2)运营商审核秒杀申请

(3)秒杀频道首页列出秒杀商品(进行中的)点击秒杀商品图片跳转到秒杀商品详细页。

(4)商品详细页显示秒杀商品信息,点击立即抢购实现秒杀下单,下单时扣减库存。当库存为或不在活动期范围内时无法秒杀。

(5)秒杀下单成功,直接跳转到支付页面(微信扫码),支付成功,跳转到成功页,填写收货地址、电话、收件人等信息,完成订单。

(6)当用户秒杀下单5分钟内未支付,取消预订单,调用微信支付的关闭订单接口,恢复库存。

2.秒杀实现思路

秒杀技术实现核心思想是运用缓存减少数据库瞬间的访问压力!读取商品详细信息时运用缓存,当用户点击抢购时减少缓存中的库存数量,当库存数为时或活动期结束时,同步到数据库。产生的秒杀预订单也不会立刻写到数据库中,而是先写到缓存,当用户付款成功后再写入数据库。

3.时间问题-倒计时方案

1).首先确定活动开始时间,和基准时间,即当前时间(SELECT NOW),以一台服务器时间为准(服务器之间的时间是有差距的)。

2).活动开始时间是固定的。

3).用活动开始时间-基准时间,获取倒计时。

4).在redis服务器中用expire设定一个key的过期时间,过期时间为3)中计算的时间,并用TTL命令获取有效时间(倒计时时间),并用js在首页展示倒计时时间(以秒为单位)。

5).当key失效时表示活动开始(TTL=-2表示当前key失效)

6).为防止用户利用漏洞在活动还没开始就能以秒杀价抢到商品,可以在秒杀前对key进行判断是否失效,如果失效(TTL=-2)表示开始,如果不失效,活动没开始不能抢购商品。

4.库存问题-秒杀方案(具体实施步骤)

1)首先把库存数量放到redis服务器中

2)活动开始(开始秒杀),当用户抢到商品时,利用decr命令对库存数量做自动减操作。

3)当库存量为时表示最后一个商品被抢

4)当库存为负数表示商品已经抢完,库存量不为负数时表示商品没有被抢完。

5)利用定时器不断扫描预订单,判断用户抢到商品后有没有在规定时间内完成付款,如果没有在规定时间内完成付款,则取消订单,库存加1。如果完成付款,则生成最终订单,并同步到mysql数据库。

注:在秒杀结束到付款前都是在redis服务器中进行数据的运算,当秒杀结束后再将最终的数据同步到MySQL中。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180728G0U41I00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券