apache模拟高并发

用apache模拟一次一万的并发量  如果不采取任何措施 测试后表最终少误差在15

经查阅资料

用mysql表锁和文件锁两种方式都可以保证表数据准确性

表锁:

ini_set('display_errors',1); 
ini_set('display_startup_errors',1); 
error_reporting(E_ALL & ~E_NOTICE);
$link=mysqli_connect('localhost','123','123','test');

mysqli_query($link,"lock table bingfa write");

if ($result = mysqli_query($link,"SELECT id,num FROM bingfa WHERE del!=1 and name='goods1'")){
    while($row = mysqli_fetch_assoc($result) ){
        $id=$row['id'];
        $num=$row['num'];
    }
}
//print_r($row);
$num--;

$f=mysqli_query($link,"UPDATE bingfa SET num=".$num." WHERE id=".$id."");

mysqli_query($link,"unlock tables");

mysqli_close($link);

Apache ab反馈总用时121.26s

文件锁
$link=mysqli_connect('localhost','123','123','test');

$file=fopen('./test.js','r');//任意一存在的文件即可
flock($file,LOCK_EX);

if ($result = mysqli_query($link,"SELECT id,num FROM bingfa WHERE del!=1 and name='goods1'")){
    while($row = mysqli_fetch_assoc($result) ){
        $id=$row['id'];
        $num=$row['num'];
    }
}
//print_r($row);
$num--;

$f=mysqli_query($link,"UPDATE bingfa SET num=".$num." WHERE id=".$id."");

flock($file,LOCK_UN);
fclose($file);

mysqli_close($link);

Apache ab反馈总用时136.79s

文件锁要比表锁慢用时长一点,但是表锁要把所有涉及本操作的表锁定,直接操作数据库造成堵塞容易拖慢整个项目,本着尽量少去操作数据库的原则还是文件锁好一点,除非项目中只需要锁定这一个表。

表锁资料:

mysql中的锁                                                                                                               
语法:LOCK TABLE 表名1  READ|WRITE, 表名2 READ|WRTIE.....

解锁:UNLOCK TABLES;

read:读锁(共享锁):如果以这种方式锁定表,那么在锁定的过程中所有客户端只有读这张表的权限,并且该客户端不能操作其他表。

write:写锁(排它锁):如果以这种方式锁定表,那么只有锁定这个表的客户端可以操作这张表,其他客户端不能操作个表直到锁释放为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值