工作了三年多,三年多一直做电商项目,但是对于系统抢购,秒杀并没有实战过,都说,项目是驱动人学习的动力,可是项目中暂时没有这样的需求.其实早在18年7月份的时候,我就想好好归纳总结自己做的电商项目,就想把抢购这块实际写出来了.工作了几年,出去面试,面试官也会问到系统设计啊,无非问题都是,如何设计个秒杀活动啊,如何设计个抽奖活动啊之类的.
2019年 3月6日,付诸行动,开始前期调研,查阅相关秒杀设计的经验,3月7日下午2019-03-07 18:02:54写了个简单的demo,当然,我后期还要完善,希望越来越完善,能把这个写成个小系统,并且开源,供大家学习思考
先看哈3月6日总结的秒杀中要解决的技术难点
在前期业务量不大的情况下,没有高并发时可以用下面的思路来解决超卖问题
再者在代码层面,用的tp5,写了个简单的demo
1.将商品库存放到redis 队列操作
http://tp5.test.com:7888/index/goods/stock
2.购买操作 包括库存 出列操作,用户入列操作
http://tp5.test.com:7888/index/buy/buy
3.异步执行 将用户的购买信息存入数据库
http://tp5.test.com:7888/index/order/createorder
接着前期准备
- PHP环境搭建,我使用的是mac开发,用的集成环境mamp
- redis扩展安装
- redis服务下载
- 数据库管理工具我使用的是navicat for mysql
暂时先用order表,虽说也设计了goods表,但是代码中商品暂时写死的,就先补考虑goods表
CREATE TABLE `tp5_order` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',
`order_sn` varchar(255) DEFAULT NULL COMMENT '订单号',
`goods_id` int(11) NOT NULL COMMENT '商品id',
`num` int(11) NOT NULL COMMENT '数量',
`add_time` int(11) NOT NULL COMMENT '下单时间',
`user_id` int(11) DEFAULT NULL,
`user_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
直接上代码截图,
重复抢购时时
在开发过程中可能用到的一些资源