mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料

mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料

ID:43033195

大小:36.00 KB

页数:3页

时间:2019-09-25

mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料_第1页
mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料_第2页
mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料_第3页
资源描述:

《mysql处理高并发加锁_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、mysqL处理高并发,防止库存超卖2014-08-1423:4417978人阅读评论(2)收藏举报三分类:数据库(43)▼今天王总又给我们上了一课,其实mysql处理高并发,防止库存超卖的问题,在去年的时候,王总已经提过;但是很可惜,即使当时大家都听懂了,但是在现实开发中,还是没这方面的意识。今天就我的一些理解,整理一下这个问题,并希望以后这样的课程能多点。先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千英至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限

2、的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。从技术方面剖析,很多人肯定会想到事务,但是事务是控制库存超卖的必要条件,但不是充分必要条件。举例:总库存:4个商品请求人:a、1个商品b、2个商品c、3个商品程序如下:beginTranse(开启事务)try{Sresult=$dbca->query(*selectamountfroms_storewherepostID=12345');if(result->amount>0){//quantity为请求减掉的库存数量$dbca->q

3、uery(*updates_storesetamount=amount・quantitywherepostID=12345*);}}catch($eException){rollBack(回滚)}commit(提交事务)以上代码就是我们平时控制库存写的代码了,大多数人都会这么写,看似问题不大,其实隐藏着巨大的漏洞。数据库的访问其实就是对磁盘文件的访问,数据库小的表其实就是保存在磁盘上的一个个文件,其至一个文件包含了多张表。例如由于高并发,当前有三个用户3、b、c三个用户进入到了这个事务中,这个时候会产生一个共享锁,所以在select的时候,这三

4、个用户查到的库存数量都是4个,同时还耍注意,mysqlinnodb查到的结果是有版本控制的,再其他用户更新没有commitZ前(也就是没有产先新版本Z前),当前用户查到的结果依然是就版本;然后是update,假如这三个用户同时到达update这里,这个时候update更新语句会把并发串行化,也就是给同时到达这里的是三个用户排个序,一个一个执行,并生成排他锁,在当前这个update语句commitZ前,其他用户等待执行,commit后,生成新的版本;这样执行完后,库存肯定为负数了。但是根据以上描述,我们修改一下代码就不会出现超买现象了,代码如下:

5、beginTranse(开启事务)try{//quantity为请求减掉的库存数最$dbca->query(*updates_storesetamount=amount・quantitywherepostID=12345*);$result=$dbca->query(*selectamountfroms_storewherepostID=12345*);if(result->amount<0){thrownewException('库存不足');}}catch($eException){rollBack(回滚)}commit(提交事务)另外,更

6、简洁的方法:beginTranse(开启事务)try{//quantity为请求减掉的库存数量$dbca->query(*updates_storesetamount=amount・quantitywhereamountA=quantityandpostID=12345');}catch($eException){rollBack(回滚)}commit(提交事务)1、在秒杀的情况下,肯定不能如此高频率的去读写数据库,会严重造成性能问题的必须使用缓存,将需耍秒杀的商品放入缓存中,并使用锁來处理其并发情况。当接到用户秒杀提交订单的情况下,先将商品数

7、量递减(加锁/解锁)后再进行其他方面的处理,处理失败在将数据递增1(加锁/解锁),否则表示交易成功。当商品数量递减到0时,表示商品秒杀完毕,拒绝其他用户的请求。2、这个肯立不能直接操作数据库的,会挂的。直接读库写库对数据库压力太大,更用缓存。把你要卖出的商品比如10个商品放到缓存中;然后在memcache里设置一个计数器來记录请求数,这个请求书你可以以你要秒杀卖岀的商品数为基数,比如你想卖出10个商品,只允许100个请求进來。那当计数器达到100的时候,后面进來的就显示秒杀结束,这样可以减轻你的服务器的压力。然后根据这100个请求,先付款的先得

8、后付款的提示商品以秒杀完。3、首先,多用户并发修改同一条记录时,肯定是后提交的用户将覆盖掉前者提交的结果了。这个点接町以使用加锁机制去解决,乐观锁或者

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。