系统环境搭建

基础:linux+php+mysql+redis

升级:CDN,只能DNS,分布式缓存,全国多节点,多线路接入(内容分发网络)

硬件升级:负载均衡LVS (高效稳定) 大型WEB集群

环境准备

软件:phpstorm/EditPlus/Eclipse PHP Deceloperss

环境:macos

mysql封装

<?php
$config['db']['master'] = array('host'=>'127.0.0.1:3306','user'=>'root','password'=>'root','dbname'=>'miaosha',
);
​
$config['db']['slave'] = array('host'=>'127.0.0.1:3306','user'=>'root','password'=>'root','dbname'=>'miaosha',
);

redis 封装

`

$config['redis']['instance1'] = array('default' => array('host' => '127.0.0.1','port' => '6379','timeout' => 5,'pconnect' => 1,'password' => '',)
);
$config['redis']['instance2'] = array('default' => array('host' => '127.0.0.1','port' => '6379','timeout' => 5,'pconnect' => 1,'password' => '',)
);

`

基本功能和流程

后台:活动管理/商品管理/邓丹管理/日志管理

前台:商品展示/秒杀/购物车/我的订单

安全:验证码/问答

流程图

秒杀

错误 问答验证

不足 库存验证

异常 生成订单 成功

数据库设计

活动信息表 ms_active(innoDB)

活动id  id
活动名称 title
活动开始    time_begin
活动结束    time_end
创建时间    add_time
修改时间    update_time
状态       0待上线  1已上线 2已下线
创建人ip   add_ip

商品信息表 ms_goods(innoDB)

商品id    id
活动id    active_id
商品名称    title
商品描述    desc
小图标     img
原价      price_normal
秒杀价     price_discount
总数量     num_total
用户限购    num_user
剩余数量    num_left
创建时间    add_time
修改时间    update_time
状态       0待上线  1已上线 2已下线
创建人ip   add_ip
​

日志记录表 ms_log(innoDB)

日志id    id
活动id    active_id
用户      uid
操作名称    action
返回信息    result
操作详情,json格式;例如:POST,refer,浏览器信息等等
创建时间    add_time
修改时间    update_time
状态       0待上线  1已上线 2已下线
创建人ip   add_ip

问答信息表 ms_question(innoDB)

问答id        id
所属活动id      active_id
问题描述        title
问题1         ask1
答案1         answer1
问题2         ask2
答案2         answer2
问题3         ask3
答案3         answer3
问题4         ask4
答案4         answer4
问题5         ask5
答案5         answer5
​
创建时间    add_time
修改时间    update_time
状态       0正常  1删除
发布人ip   add_ip
​

订单信息表 ms_order(innoDB)

订单id        id
活动id        active_id
商品id        goods_id
购买单品数量      num_total
购买商品种类数量    num_goods
订单总金额       price_total     decimal
优惠后实付金额     price_discount      decimal
下单时间            add_time
支付之间            pay_time
过期时间            over_time
取消时间            cancel_time
订单商品详情,json     goods_info
​
创建时间    add_time
修改时间    update_time
状态       0初始 1待支付 2已支付 3已过期 4管理确认 5取消  6删除  7已发货  8已收货  8已完成
发布人ip   add_ip
​
​
下单人 uid
用户名  username
​
索引管理
主键      id      primaer key
活动id    active_id   key
商品id    goods_id    key
​
备注:所有字段 not null
​
​

交互思想

后台:基本的管理功能,数据数据列表(增删改查)

前台:商品的展示,抢购,订单,购物车,登陆等功能

安全:防攻击,防作弊,防抢购机器人

商品页面开发

展示页面可以静态化:将商品数据添加到memcache缓存数据

秒杀开始之前使用静态页面,秒杀活动开始,程序替换html文件(保护秒杀接口)

商品的几种状态

开始前,进行中,库存不足,结束

秒杀逻辑控制

详细的验证,高效的处理

//参数处理
id
goods_id
goods_num
ask
anser
getClientIp()
​
//1 验证用户是否登陆
​
//2 验证参数是否正确,合法
​
//3 验证用户是否已经购买
​
//4 验证问答信息是否正确
​
//5 验证活动信息 商品信息是否正确
​
//6 验证用户购买的商品数量是否在限制范围内
​
//7 验证商品时候还有剩余数量
​
//8 扣除商品剩余数量
​
//9 创建订单
​
//10  返回提示信息
​

memcache的调用数据

//连接memcache服务
$mem=new Memcache;
$mem->connect("localhost","11211");
​
增:
$mem->add($key,$value,是否压缩,过期时间);//添加数据
$mem->set($key,$value,是否压缩,过期时间);//设置数据
​
删:
$mem->delete($key);
$mem->flush();
​
改:
$mem->set($key,$value,是否压缩,过期时间);
​
查:
$mem->get($key);
​
<?php //类文件class MyMemcache{public $mem = null;public function __construct($host = 'localhost',$port = 11211){$this->mem = new Memcache;$this->mem -> connect($host,$port);}// 获取public function mget($key){return $this->mem -> get($key);}// 批量获取public function mgetall(Array $key) //类型约束{$temp = [];foreach ($key as $k => $v) {$temp[] = $this->mem -> get($v);}return $temp;}// 添加public function madd($key,$val,$time = 60){return $this->mem -> add($key,$val,MEMCACHE_COMPRESSED,$time);}// 设置public function mset($key,$val,$time = 60){return $this->mem -> set($key,$val,MEMCACHE_COMPRESSED,$time);}// 删除public function mdelete($key){   return $this->mem->delete($key);}// 清空public function mflush(){return $this->mem->flush();}// 检测 检测内存中是否有该值public function mcheck($key){if($this->mem->get($key)){return true;}else{return false;}}}
?>
//查询缓存,调取数据存入缓存,缓存有数据使用缓存数据,否则调取数据存入缓存,是红缓存数据
if($mem -> mcheck($mdata_key)){
//缓存数据
​
}else{
//查询数据库
// 将值存在缓存中
​
}

php商品秒杀功能笔记相关推荐

  1. dubbo mysql_dubbo系列(四) 凑一下热闹 使用dubbo redis mybatis mysql 实现商品秒杀功能...

    jmeter实现并发抢购 使用我的pc tomcat使用默认设置, 商品为5000个,未优化测试结果最高qps1400 开了两个dubbo服务 秒杀前准备数据 创建list存到redis里, 如果一个 ...

  2. python实现京东商品秒杀功能

    from selenium import webdriver import datetime import time# 打开Chrome浏览器 driver = webdriver.Chrome()d ...

  3. Spring Boot + redis解决商品秒杀库存超卖,看这篇文章就够了

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:涛哥谈篮球 来源:toutiao.com/i68366119 ...

  4. redis如何解决秒杀超卖java_Spring Boot + redis解决商品秒杀库存超卖,看这篇文章就够了...

    作者:涛哥谈篮球 来源:toutiao.com/i6836611989607809548 问题描述 在众多抢购活动中,在有限的商品数量的限制下如何保证抢购到商品的用户数不能大于商品数量,也就是不能出现 ...

  5. java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  6. 秒杀商品展示及商品秒杀

    目录 一.登录方式调整 二.秒杀商品展示&秒杀商品详情&商品秒杀功能 1.生成秒杀订单 2.绑定秒杀商品 3.查看看秒商品 4.订单秒杀 ① 移除seata相关 ② 生成秒杀订单 ③ ...

  7. java秒杀系统 代码大全_Java秒杀系统:商品秒杀代码实战

    内容: "商品秒杀"功能模块是建立在"商品详情"功能模块的基础之上,对于这一功能模块而言,其主要的核心流程在于:前端发起抢购请求,该请求将携带着一些请求数据:待 ...

  8. Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  9. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

最新文章

  1. R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
  2. Android 开发笔记(一) 按钮事件调用Activity
  3. 开源 非开源_打破开源中的怪胎刻板印象
  4. 谈谈PHP系统中的领域驱动开发
  5. 类Dota2服务器架构
  6. 深入浅出的讲解傅里叶变换(原文作者 韩昊)
  7. (20191227已解决)从Linux服务器下载超过4G的文件并批量操作同类型文件
  8. 在odl中如何实现rpc
  9. python对excel中需要的数据的单元格填充颜色
  10. PyCharm的cache缓存文件清理
  11. 计算机主板手工,教你DIY一台笔记本(伪),简单粗暴成本低
  12. Iqoo手机删除内置应用
  13. 晶体DSX321G被公认的车载晶振在无人货车上也将功能发挥的淋漓精致
  14. 在nsa组网架构中,3gpp定义的nr与epc的接口是什么
  15. Facebook创始人原型电影《社交网络》票房夺冠
  16. SQL 语句的多表查询方式
  17. 小布机器人怎么断网_小布同学智能机器人好坏判断有诀窍,三大误区要避免
  18. Junit报错:Argument(s) are different! Wanted:
  19. 浅谈抢票软件的危害及模拟分析
  20. 泰康保险与百度会晤,新基建浪潮下共推保险行业智能化转型升级

热门文章

  1. 软!为码农而生的静电容键盘——PLUM 87键 全域35g
  2. maven多模块依赖版本不一致问题
  3. SpringBoot自定义注解实现身份证号格式校验
  4. JAVA | 线程(四)线程通信
  5. mysql 1286错误_通过navicat做myslq数据同步时报[Err] [Dtf] 1286 - Unknown storage engine InnoDB错误...
  6. 线代:已知一个特征向量快速求另外两个与之正交的特征向量
  7. 如何修复WordPress更新失败/发布失败错误,您可能已掉线
  8. CNN步长卷积计算公式和strided convolution
  9. alibaba easyexcel读写的使用
  10. 重学 Java 设计模式:实战适配器模式「从多个MQ消息体中,抽取指定字段值场景」