php高并发数据错乱 php高并发三种解决方法

php解决高并发?php
2 //优化方案1:将库存字段number字段设为unsigned , 当库存为0时,因为字段不能为负数,将会返回false
3 include('./mysql.php');
4 $username = 'wang'.rand(0,1000);
5 //生成唯一订单
6 function build_order_no(){
7return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
8 }
9 //记录日志
10 function insertLog($event,$type=0,$username){
11global $conn;
12$sql="insert into ih_log(event,type,usernma)
13values('$event','$type','$username')";
14return mysqli_query($conn,$sql);
15 }
16 function insertOrder($order_sn,$user_id,$goods_id,$sku_id,$price,$username,$number)
17 {
18global $conn;
19$sql="insert into ih_order(order_sn,user_id,goods_id,sku_id,price,username,number)
20values('$order_sn','$user_id','$goods_id','$sku_id','$price','$username','$number')";
21returnmysqli_query($conn,$sql);
22 }
23 //模拟下单操作
24 //库存是否大于0
25 $sql="select number from ih_store where goods_id='$goods_id' and sku_id='$sku_id' ";
26 $rs=mysqli_query($conn,$sql);
27 $row = $rs-fetch_assoc();
28if($row['number']0){//高并发下会导致超卖
29if($row['number']$number){
30return insertLog('库存不够',3,$username);
31}
32$order_sn=build_order_no();
33//库存减少
34$sql="update ih_store set number=number-{$number} where sku_id='$sku_id' and number0";
35$store_rs=mysqli_query($conn,$sql);
36if($store_rs){
37//生成订单
38insertOrder($order_sn,$user_id,$goods_id,$sku_id,$price,$username,$number);
39insertLog('库存减少成功',1,$username);
40}else{
41insertLog('库存减少失败',2,$username);
42}
43}else{
44insertLog('库存不够',3,$username);
45}
46 ?
PHP如何解决网站大流量与高并发的问题可以采用数据库缓存、事务缓存等技巧 。还可以从架构上把事务做合理的分配,花钱扩充你的硬件设施等 。比如,阿里巴巴从最初的1台电脑逐步扩充到过万台电脑了 。
与PHP程序关系也非常大,比如 , 你发现了网站反应慢的第一因素是因为某个表非常大,你的网页从那个库表中读写时间非常长,可以考虑用一个原则把数据库表分段,每一段存到不同的计算机上去保存,你的程序需要读写那个表的时候,先判断要读写的内容属于哪一段的 , 然后再去从已经建立了永久连接的清单中找到对应段的连接来用 。
阿里巴巴有个例子:每一种商品的属性字段内容打印出来就要5页A4纸,160多万种商品 , 如果你要从包含了商品属性字段的那张表中进行读写,该是多长时间?
php怎么处理高并发以下内容转载自徐汉彬大牛的博客 亿级Web系统搭建——单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大 , 在这个过程中,我们会遇到很多的问题 。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制 。在不同的压力阶段 , 我们会遇到不同的问题,通过搭建不同的服务和架构来解决 。
Web负载均衡
Web负载均衡(Load Balancing) , 简单地说就是给我们的服务器集群分配“工作任务” , 而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要 。
负载均衡的策略有很多,我们从简单的讲起哈 。
1. HTTP重定向
当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向 。通过重定向,来达到“负载均衡”的目标 。例如,我们在下载PHP源码包的时候 , 点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址 。重定向的HTTP返回码是302

推荐阅读