抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:
1 高并发对数据库产生的压力
2 竞争状态下如何解决库存的正确减少("超卖"问题)
对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,
例如使用 Redis。
重点在于第二个问题
常规写法:
查询出对应商品的库存,看是否大于 0,然后执行生成订单等操作,但是在判
断库存是否大于 0 处,如果在高并发下就会有问题,导致库存量出现负数
[php]view plaincopy
1. <?php
2. $conn=mysql_connect("localhost","big","123456");
3. if(!$conn){
4. echo"connectfailed";
5. exit;
6. }
7. mysql_select_db("big",$conn);
8. mysql_query("setnamesutf8");
9.
10. $price=10;
11. $user_id=1;
12. $goods_id=1;
13. $sku_id=11;
14. $number=1;
15.
16. //生成唯一订单
17. functionbuild_order_no(){
18. returndate('ymd').substr(implode(NULL,array_map('ord',st
r_split(substr(uniqid(),7,13),1))),0,8);
19. }
20. //记录日志
21. functioninsertLog($event,$type=0){
22. global$conn;
23. $sql="insertintoih_log(event,type)