高并发时表锁与文件锁
首页->学习资料->编程语言->php教程->大型网站技术 关键词: 发布时间:2016-03-26 11:31:15 浏览次数:1614

应用场景:高并发时下单,或者对某一表进行操作


如:某表中有一个数字为100,现在多人同时进行取出,-1,存回,假设有一百个人同时执行一次,我们预期的结果是0(低并发下),但事实上运行的结果却是99


MYSQL中的锁

         同一时间只有一个人可以获取锁,其他人只能阻塞等待第一个人释放锁。

         LOCKTABLE 表名 read|write;

         UNLOCKTABLES;

Read:所有人都只可以读,只有释放锁之后才可以写

Write:只有锁表的客户可以操作这个表,其他客户读都不能读。

注意:在锁表过程中只能操作锁定的表,如果要操作其他表,需要都锁起来!。

同时锁定多张表:LOCK TABLE 表名1 read|write, 表2 read|write, 表3 read|write…..

 

缺点:阻塞。有些功能需要锁多张表,而有些表整个网站都要用,一旦锁定,会让整个网站处在阻塞状态。

 

 

PHP中的锁

         特点:非阻塞。对表没有任何压力,所以实际应用使用这种比较好


<?php
namespace classes;
class Helper
{
    private static $_lockFp = array();
   
    public static function startLock($lockFileName)
    {
        self::$_lockFp[$lockFileName] = $fp = fopen(ROOT . '/data/lock/'.$lockFileName, 'r');//文件锁
        if(!$fp)
            return FALSE;
        $try = 10;//试十次,避免一直死循环
        $lock = false;
        do
        {
            $lock = flock($fp, LOCK_EX);
            if(!$lock)
                usleep(50000);  // 休息0.05秒,减轻cpu压力,usleep单位是微秒
        }while(!$lock && --$try > 0);
        return $lock;
    }
    public static function endLock($lockFileName)
    {
        if(isset(self::$_lockFp[$lockFileName]))
        {
            @flock(self::$_lockFp[$lockFileName], LOCK_UN);
            @fclose(self::$_lockFp[$lockFileName]);
        }
    }
}

赞:(0)
踩:(0)
相关文章
大型网站及面临的问题及解决方法
网页静态化
thinkphp网页静态化
sphinx全文索引
海量订单数据存储方法
高并发时商品库存处理方法
高并发测试及系统状态监测
PHP解决抢购、秒杀、抢楼、抽奖等
php多线程例子
php上传到七牛
热门文章
win7中将文件拷贝到虚拟机linux下
phpexcel设置行高及列宽,背景颜色,
rabbitmq无法启动
intellij idea不显示git push按钮
php7中使用mongodb的aggregate进行
centos7.4 64位下swoole安装及配置
laravel页面静态化的方法
navicate连接mycat报1184错误
单点登录sso原理及php实现方式及de
devops-jenkins容器为pending状态
好评文章
phpexcel设置行高及列宽,背景颜色,
php7中使用mongodb的aggregate进行
intellij idea打开文件所在文件夹
windows下使用MongoDB Compass Com
win7中将文件拷贝到虚拟机linux下
laravel 中悲观锁 & 乐观锁的使用
单点登录sso原理及php实现方式及de
navicate连接mycat报1184错误
rabbitmq无法启动
laravel整合dingo/api方法步骤:jwt
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:607篇
浏览数:938423
粤ICP备18028092号-1  微信:hurong241