我是靠谱客的博主 现实皮皮虾,最近开发中收集的这篇文章主要介绍mysql防止商品超卖_避免商品超卖的4种方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原始方案(失败):在每次下订单前我们判断促销商品的数量够不够,不够不允许下订单,更改库存量时加上一个条件,只更改商品库存大于0的商品的库存,当时我们使用ab进行压力测试,当并发超过500,访问量超过2000时,还是会出现超卖现象。

public functionbuyOne()

{$shop = Shop::find(1);if ($shop->number > 0) {

DB::update("update shop set number = number - 1 where id = 1");

}

}

第1种方案:使用mysql的事务加排他锁来解决,首先我们选择数据库的存储引擎为innoDB,使用的是排他锁实现的,刚开始的时候我们测试了下共享锁,发现还是会出现超卖的现象。有个问题是,当我们进行高并发测试时,对数据库的性能影响很大,导致数据库的压力很大。

//2.利用数据库的forupdate来加锁(在数量少的情况下并不会出现问题,但是当并发达到(ab -n 1000 -c 200),

//就会出现请求非2XX的响应增多,1000 失败了 60)time per request 65.195

//在高并发的情况下,会导致数据库连接数不够,部分php获取不到连接而报错,或者是超过等待时间而报错

public functionindexMysql()

{

DB::beginTransaction();//通过for update 加排它锁

$shop = DB::table(&

最后

以上就是现实皮皮虾为你收集整理的mysql防止商品超卖_避免商品超卖的4种方案的全部内容,希望文章能够帮你解决mysql防止商品超卖_避免商品超卖的4种方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部