前言
- 首先选用内存数据库来抢购速度极快。
- 速度快并发自然没不是问题。
- 使用悲观锁,会迅速增加系统资源。
- 比队列强的多,队列会使你的内存数据库资源瞬间爆棚。
- 使用乐观锁,达到综合需求。
一、示例代码
$redis = new \Redis();
$redis->connect('192.168.6.210', 6379);
$num = $redis->get("num");
var_dump('num:'.$num);
$rob_total = 10; //抢购数量
if($num<$rob_total){
$redis->watch('num');
$redis->multi(); //redis事务开始
sleep(5);
$redis->incr("testwatch"); //乐观锁的版本号+1
$rob_result = $redis->exec();//redis事务提交 ,如果事务过程中num这个值发生变化,这里redis事务失败
if($rob_result){
$num = $redis->get('num');
var_dump($num);
echo "成功";
}else{
echo "再来一次,抢购失败";
}
}else{
echo "卖完!";
}