php商品秒杀功能笔记

这篇博客详细记录了使用PHP开发商品秒杀功能的过程,包括系统环境搭建(Linux、PHP、MySQL、Redis),环境准备,MySQL和Redis的封装,以及商品秒杀的核心逻辑控制。文中提到了CDN加速、安全验证(如验证码)、数据库设计和交互思想,并讨论了商品的不同状态及如何利用Memcache优化数据调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统环境搭建

 

基础: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{
//查询数据库
// 将值存在缓存中
​
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值