PHP实现商品抢购

首先在MySQL表中将商品库存字段设置为无符号及不能为负数

1.php+redis(需要独立服务器

在后台设置商品抢购时,将商品信息加入到redis中,

$store=1000; 参与抢购的商品数量

$goodsid=1;商品ID

$spec=2;商品规格Id

$redis=new Redis();

$result=$redis->connect('127.0.0.1',6379);连接redis

for($i=0;$i<$store;$i++){

$redis->lpush("goods_store_".$good side."_".$sepc,1);

}

前端抢购API

$redis=new Redis();

$result=$redis->connect('127.0.0.1',6379);

$count=$redis->lpop('("goods_store_".$good side."_".$sepc,1);

});

if(!$count){

弹出商品已经抢完的提示信息

return FALSE;

}

之后组合订单信息,存入到数据库中保存

2.php+Mysql 事务(适合云虚拟主机,无法安装redis的服务器)

mysql_query("BEGIN"); 开始事务

$sql="select number from store where goodsid='$goodsid' and spec='$spec' FOR UPDATE";

此时这条记录被锁住,其它事务必须等待此次事务提交后才能执行

$rs=mysql_query($sql);

if($row['number']>0){

商品数量大于0时生成订单

$order_sn=build_order_no();

$sql="insert into ih_order(order_sn,user_id,goods_id,sku_id,price)

values('$order_sn','$user_id','$goods_id','$sku_id','$price')";

$order_rs=mysql_query($sql,$conn);


//库存减少

$sql="update store set number=number-{$number} where sku_id='$sku_id'";

$store_rs=mysql_query($sql,$conn);

if(mysql_affected_rows()){

insertLog('库存减少成功');

mysql_query("COMMIT");

事务提交即解锁,下次请求可正常执行。

}else{

'库存减少失败';

}

}else{

mysql_query("ROLLBACK")

事务回滚,当MySQL操作有一个失败时之前的所有操作会被撤回。

return FALSE;

}

商品   PHP
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章