<?php
$error_level = error_reporting(0);
$con = new mysqli('localhost','root','root','test');
if(!$con){
echo "数据库连接失败";
}
$sql = "select * from products where id=1";
$result = mysqli_query($con,$sql);
$aa= mysqli_fetch_row($result);
if($aa[3]>0){
sleep(1);
$sql = "update products set store=store-1 where id=1";
if(mysqli_query($con,$sql)){
echo "更新成功";
}
}else{
echo "没有库存";
}
redis乐观锁防止超卖
<?php
// ini_set('default_socket_timeout', -1);
$redis =new Redis();
$redis->connect("127.0.0.1", 6379);
$redis->watch('sales');//乐观锁 监视作用 set() 初始值0
$sales=$redis->get('sales');
$n=100;
if($sales>=$n){
exit('秒杀结束');
}
//开启事务
$redis->multi();
$redis->incr('sales'); //将 key 中储存的数字值增一 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
$res=$redis->exec(); //成功1 失败0
if($res){
//秒杀成功
include 'db.php';
$sql="update products set store=store-1 where id=1";
if($mod->exec($sql)){
echo "秒杀完成";
}
}else{
exit('抢购失败');
}
转载请注明:SuperIT » PHP+redis乐观锁防止高并发超卖,秒杀

