系统环境搭建
基础: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{
//查询数据库
// 将值存在缓存中
}