跳至主要內容

01 秒杀系统功能概述

Java突击队大约 2 分钟

01 秒杀系统功能概述

前言

前面我们的苏三商城系统已经实现了:商品管理、订单管理、支付宝支付等功能。

接下来,打算实现一个非常有意思的功能:商品秒杀功能,这个功能无论在面试,还是实际工作中,出现的概率挺高的。

我原本打算将这个模块放到商城系统中的。

但考虑到有些小伙伴,没有经历过一些高并发的项目,不知道要用什么技术应对。

因此,我现在将秒杀系统和商城系统分开,分成两个完全独立的服务。

秒杀系统并发量高。

商城系统目前并发量不太高。

1 功能介绍

秒杀系统前端页面,在还没到秒杀时间之前,比如:618的0点,相关的购买按钮是置灰的。

这相关商品列表中的商品价格和库存,用户有可能可以看到。

到了秒杀时间,前端页面的购买按钮,回复正常了。

大量用户开始购买极少数商品,比如:有3个商品参与了秒杀。

则有大量的用户会抢购这3个商品。

大部分用户会提示:该商品已售罄,看到商品的库存变成0。

只有极少数用户能抢到秒杀商品。

有些用户抢到商品,在规定的时间,比如:15分钟内,完成了付款操作,则这次订单会顺利完成,库存也能正常扣减。

但有少部分用户,抢到商品之后,没有及时付款,或者忘记付款了。

则这部分商品的库存,要退还回去。

在退还库存的过程中,如果又有新的请求购买商品请求过来,这个此时的库存到底要怎么计算。

在高并发的情况下,如何防止库存出现超卖的情况?

秒杀系统涉及的东西还是不少的。

2 使用技术

为了保证接口在高并发的场景下,不影响商城系统的功能,除了项目要独立之外,数据库和表也要独立。

秒杀系统我们打算沿用之前商城系统的一些技术栈。

开发语言:Java8。

数据库用:MySQL。

框架用:SpringBoot、Mybatis、Spring Security。

缓存用:Redis。

消息中间件用:RabitMQ。

分布式锁框架用:Redission。

脚本语言:Lua

当然还可能用点其他的技术,比如有一些特殊的业务场景:订单超时失效功能,失败自动重试功能等。