之前写过一篇文章,高并发的解决思路(点此进入查看),今天再次抽空整理下实际场景中的具体代码逻辑实现吧:
抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢?
常规写法:
查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数
这里我就只谈redis的解决方案吧...
我们先来看以下代码(这里我以laravel为例吧)是否能正确解决超抢/卖的问题:
<?php $num = 10; //系统库存量 $user_id = \Session::get(\'user_id\');//当前抢购用户id $len = \Redis::llen(\'order:1\'); //检查库存,order:1 定义为健名 if($len >= $num) return \'已经抢光了哦\'; $result = \Redis::lpush(\'order:1\',$user_id); //把抢到的用户存入到列表中 if($result) return \'恭喜您!抢到了哦\';