redis乐观锁秒杀,php秒杀,php redis秒杀,php redis 乐观锁秒杀
保证秒杀并发场景下库存不为负代码案例:
$key = '设置秒杀的KEY值';
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->watch($key);
$sales = $redis->get($key);
//库存为定值,购买后不应减。而是加销量,假设是5
$stores = 5;
if ($sales >= $stores) {
//这里是已售罄的业务可根据自己的业务场景构建业务
exit("已售罄");
}else {
//开启事务
$redis->multi();
$redis->incrby($key, 1);
$result = $redis->exec();
if ($result) {
//这里是抢购成功的业务
//例如:
$conn = new PDO('mysql:host=localhost;dbname=dkysh', 'root', 'root');
//执行数据库的销量增加操作,执行订单创建等操作
$conn->query("update xs_ms set stock = stock-1 where id = 1");
} else {
//这里是下单失败的业务
$redis->incrby($key, -1);
exit("重新下单");
}
}本文由:xiaoshu168.com 作者:xiaoshu发表,转载请注明来源!