工作了三年多,三年多一直做电商项目,但是对于系统抢购,秒杀并没有实战过,都说,项目是驱动人学习的动力,可是项目中暂时没有这样的需求.其实早在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

 

 直接上代码截图,

 

记录一次秒杀设计,代码实现

 

 

记录一次秒杀设计,代码实现

 

 

 

记录一次秒杀设计,代码实现

 

记录一次秒杀设计,代码实现

 

重复抢购时时

记录一次秒杀设计,代码实现

 

记录一次秒杀设计,代码实现

 

 

记录一次秒杀设计,代码实现

 

记录一次秒杀设计,代码实现

 

记录一次秒杀设计,代码实现

 

 

 

在开发过程中可能用到的一些资源

navicat for mysql mac版

navicat for mysql windows版

navicat for mysql 32位

wamp开发环境 window下可使用

 

mac下搭建redis的方法

 

 

相关文章:

  • 2021-12-18
  • 2021-09-03
  • 2021-12-01
  • 2022-01-19
  • 2021-12-25
  • 2021-12-04
  • 2021-11-23
  • 2021-11-04
猜你喜欢
  • 2022-01-21
  • 2022-01-13
  • 2021-05-02
  • 2021-11-13
  • 2022-12-23
  • 2021-09-05
相关资源
相似解决方案