资讯专栏INFORMATION COLUMN

PHP 锁机制

wpw / 3373人阅读

摘要:应用环境解决高并发,库存为负数的情况阻塞模式如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行文件锁非阻塞模式如果其他进程已经加锁文件,当前进程不会等其他进程解锁文件,直接返回,也就是直接忽略加锁的代码到关闭文件那块文件锁

应用环境

解决高并发,库存为负数的情况

阻塞模式

如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行

flock($fp, LOCK_EX) // 文件锁

非阻塞模式

如果其他进程已经加锁文件,当前进程不会等其他进程解锁文件,直接返> 回,也就是直接忽略加锁的代码到关闭文件那块

flock($fp,LOCK_EX | LOCK_NB) // 文件锁

代码

flock($fp, LOCK_EX)flock($fp,LOCK_EX | LOCK_NB) 换一下就行,其他都一样

query("SELECT surplus_total_num FROM tb_product WHERE id=1 LIMIT 1");
    if( $info["surplus_total_num"] > 0 ){
        D()->execute("UPDATE tb_product SET surplus_total_num = surplus_total_num - 1  WHERE id=1");
        $isSurplusProduct = 1;
    }else{
        $isSurplusProduct = 0;
    }
    flock($fp, LOCK_UN);
}
fclose($fp);

if( !$isSurplusProduct ) exit("已经没有产品了");
并发测试

查看数据库的库存是否一致保持为0 ab参数:-c:并发数;-n:总请求数

ab -c 20 -n 1000 http://www.test.com/test.php

参考文档

https://www.gaojiufeng.cn/?id=97
https://www.jb51.net/article/...
http://www.cnblogs.com/scotom...

备注

网上还有eaccelerator方式使用,还是file更通用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29106.html

相关文章

  • Mysql的机制PHP文件处理高并发简单思路

    摘要:以购买商品举例从数据库获取库存的数量。这里暂时就不测试了,下面会针对并发的处理给出测试结果。第二种方案,使用的文件锁。特点当调用锁一个文件时,如果没有获取锁,直接返回,不会出现阻塞。的表锁和的文件锁在应对并发数量上也有差别,自己可以多测试。 以购买商品举例: ① 从数据库获取库存的数量。② 检查一下库存的数量是否充足。③ 库存的数量减去买家购买的数量(以每个用户购买一个为例)。④ 最后...

    sunsmell 评论0 收藏0
  • php 文件简单应用

    摘要:锁机制之所以存在是因为并发导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,的文件锁也是为了应对资源竞争。 锁机制之所以存在是因为并发导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrit...

    pakolagij 评论0 收藏0
  • PHP程序员必备基础

    摘要:版本的特性并行的三次握手四次挥手粘包问题,连接池,攻击通信原理加密算法配置文件逐行理解与配置配置规则错误的排查架构原理的理解的了解配置文件进程数与和内存的关系垃圾回收内存泄漏运行过程协议与的区别注是扩展库版本是版本算法一致性 1,http (1)request reponse (2)code:200 302,304 400 404 403 500 502 504 nginx499 ...

    Coly 评论0 收藏0

发表评论

0条评论

wpw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<