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

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

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

$prize_id=2; 
//读取库存 如果缓存没数据那就先读取数据库 里面也实现了分布式锁 
 
$sql='select prizecount from dsfs_prizelimit where id=?'; 
$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);

然后随机读取就行

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/4079.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论