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("重新下单"); } }