1 Star 8 Fork 2

a7. / 商品秒杀+限流+限时抢购+隐藏接口

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

一、什么是秒杀

秒杀最直观的定义:在高并发场景下而下单某一个商品,这个过程就叫秒杀

【秒杀场景】

  • 火车票抢票
  • 双十一限购商品
  • 热度高的明星演唱会门票
  • ......

二、为什么使用秒杀

早起的12306购票,刚被开发出来使用的时候,12306会经常出现 超卖 这种现象,也就是说车票只剩10张了,却被20个人买到了,这种现象就是超卖!

还有在高并发的情况下,如果说没有一定的保护措施,系统会被这种高流量造成宕机

【为什么使用秒杀】

  • 严格防止超卖
    • 库存100件 你卖了120件 等着辞职吧!
  • 防止黑客
    • 假如我们网站想下发优惠给群众,但是被黑客利用技术将下发给群众的利益收入囊中
  • 保证用户体验
    • 高并发场景下,网页不能打不开、订单不能支付 要保证网站的使用

三、测试

搭建数据库

create database stockdb;
use stockdb;

# 用户
create table `user`(
	uid int primary key auto_increment,
	uname varchar(100),
	upwd varchar(50)
);

# 商品
create table stock(
	id int primary key auto_increment,
	`name` varchar(50),
	`count` int,	#库存数量
	sale int,		#已售
	`version` int	#版本号(乐观锁)
);

# 订单
create table stock_order(
	id int primary key auto_increment,
	sid int,
	`name` varchar(50),
	`create_time` timestamp
);

insert `user` values('0','jiabin','123');
insert stock value('0','iPhone 13 Pro',15,0,0);

1、普通乐观锁防止商品超卖

使用JMeter压力测试工具访问即可:http://localhost:8989/ms/stock/kill/1

解决商品超卖问题!

注意:若出现秒杀商品已经结束.. 注释掉redis限时即可!

多次测试请注意数据库库存数量正常!

2、限流、令牌桶、限时抢购、隐藏接口、单用户限制访问频率

  1. 启动redis服务

    • # 后台启动
      redis-server jconfig/redis.conf
      
      # 设置一个商品有效秒杀时间
      set kill1 1 EX 60
  2. 访问路径获取md5

  3. 通过生成的md5对商品进行秒杀

注意:若出现秒杀失败.当前商品异常火爆...代表当前未获取到令牌桶生成的令牌,可以尝试注释令牌桶拦截再进行访问!

多次测试请注意数据库库存数量正常!

空文件

简介

适用于高并发场景下商品秒杀,包含内容商品超卖问题、接口访问限流问题、Redis限时抢购、隐藏秒杀接口、单用户限制访问频率! 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/JiaBin1/kill-goods.git
git@gitee.com:JiaBin1/kill-goods.git
JiaBin1
kill-goods
商品秒杀+限流+限时抢购+隐藏接口
master

搜索帮助