Skip to content

MrShadowalker/secKill

Repository files navigation

秒杀系统

秒杀场景

秒杀系统主要应用在商品抢购的场景,例如:

  • 电商抢购限量商品
  • 抢票,火车票、周董演唱会门票……
  • ……

为什么要做秒杀

秒杀活动理解

现在不少电商或者各类平台都有整点秒杀活动。所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种营销方式。

由于商品价格低廉(相比原价)、或者具有超高性价比、或者具有超高稀缺性等原因,往往一上架就被抢购一空。

通过秒杀活动营造紧张气氛,有效提升客户的购买转化率,并做好关联营销带动平台或店铺整体营收。

平台(以下平台均代指平台、商家、店铺等)可用这种营销方式,打造爆款商品吸引新客或者做存量客户经营。

秒杀的意义

  • 聚焦流量和关注度

比如,用户会因为一个商品打到非常低的价格而关注你,用户注意力一被吸引,流量马上就来了。这时候,作为平台方(或者商家店铺),就可以利用这些注意力,搞一些动作,比如活动推广,或者其他的营销方式,商城也可以推动用户促进二次消费。

这样对流量和关注度也就有了更好的利用。

  • 通过秒杀来长时间吸引人群

比如,麦当劳经常搞一些周二免费领取板烧鸡腿堡之类的活动,或者限量商品 1 分钱,于是会有一群人慕名而来,发现要等好久或者限量商品卖完了,如果他们刚好饿了……这个时候麦当劳就可以引导顾客购买其他食品,反正来了也是来了,总该买点什么吧。

以上就是秒杀的基本逻辑。

秒杀流程

  • 发布:平台用爆款产品设置活动,如原价 100 元商品,0 点抢购只需 9.9 元。通过朋友圈预热、秒杀预热、站内站外信等各种方式积累流量。
  • 参与:客户通过分享、点击等方式参与进活动,设置少量库存和倒计时,营造紧张感;其他营销活动配合进行,带动其他活动热度。
  • 集流:秒杀成功可邮寄,收集参与者用户信息,也许都是潜在目标用户。

秒杀优点

  • 快速引流:吸引大量新老用户关注平台,节省高额引流获客成本
  • 存量客户经营:定期举行老用户秒杀福利专场,设置一定门槛,激励老用户日常消费
  • 提升商城销量甚至平台营收:如果能带动其他商品销量,或者引导用户参与了其他营销活动,整体营收瞬间翻倍
  • 对于商城,解决店铺库存积压问题:积压库存变身引流神器,带动整体销量

为什么要独立做秒杀系统

秒杀系统抽象来说就是以下步骤:

  • 用户选品下单
  • 校验库存
  • 扣减库存
  • 创建用户订单
  • 用户支付,等待后续步骤

听起来其实是蛮简单的流程,但为何要独立出来做一个模块呢?

如果项目流量非常小,完全不担心有并发的购买请求,那么做秒杀模块意义就不大了。

但如果系统要像淘宝、12306、大麦网一样,接受高并发访问和下单的考验,那么就需要一套完整的流程保护措施,来保证系统在用户流量高峰期不会被搞挂,并且还需要满足业务需要。

功能 & 措施

  • 严格防止超卖:库存 100 件,如果卖了 120 件,就凉凉。
  • 防止黑产:防止不怀好意的人通过各种技术手段把本该让正常用户买到的全部收入囊中。
  • 尽力保证用户体验:高并发下,网页打不开、支付不成功、购物车进不去、地址改不了……极度影响用户体验,造成客户流失。

打造简易秒杀系统

该项目为基于SpringBoot的简易秒杀系统 demo

对应教程

【秒杀系统】一:防止超卖

【秒杀系统】二:令牌桶限流

【秒杀系统】三:抢购接口隐藏 + 单用户限制频率

【秒杀系统】四:缓存与数据库双写问题的争议

【秒杀系统】番外篇:阿里开源MySQL中间件Canal快速入门

【秒杀系统】五:如何优雅的实现订单异步处理

项目使用简介

项目是 SpringBoot 工程,并且是父子工程,直接导入 IDEA 即可使用。

  1. 导入 secKill.sql 文件到 MySQL 数据库
  2. 配置 application.properties 文件,修改为数据库连接地址
  3. mvn clean install 最外层的父工程 pom.xml,有些包如果在公司无法导入,可能是网络原因,后期会尽量改成公司内部可以使用的包。
  4. 运行 secKill-web,在 POSTMAN 或者浏览器直接访问请求链接即可

项目规划

  • 防止超卖(悲观锁、乐观锁均实现了)
  • 令牌桶限流
  • Redis 缓存
  • 消息队列异步处理订单
  • 基于 Canal 工具,实现数据库增量日志解析,提供增量数据订阅 & 消费
  • ……

Releases

No releases published

Packages

No packages published

Languages