php redis实现在高并发下防止库存超卖解决方案

php redis实现在高并发下防止库存超卖解决方案

我直接用set get来实现 毕竟他速度最快。。

$prize_id=2;
//读取库存 如果缓存没数据那就先读取数据库 里面也实现了分布式锁

$sql='select prizecount from dsfs_prizelimit where ;
$key='prizeid'.$prize_id;
$prizecount=$this->getcacheinfo($sql,array($prize_id),$key,-1)[0]['prizecount'];
//如果没有库存了
if($prizecount<=0){
exit();
}
//实现购买逻辑
//库存减去1 这个地方要注意 mysql事务成功后再去执行redis
$redis->set($key,$prizecount-1);

 

ps: 进入购买逻辑 如果购买失败 redis库存还是要减去的

上面代码看的出来如果在高并发下明显力不从心

所以要让代码进化下 用redis 分段加锁 另外1redis 生成2个redis

直接把库存读取出来 比如100

分成2个就是除以2

$redis->set('ss1',50);

$redis->set('ss2',50);

然后随机读取就行

不过上面代码只能加快了判断速度判断库存速度 下面购买逻辑速度还是一样