`
phpkim
  • 浏览: 12177 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL锁机制和PHP锁机制

阅读更多

模拟准备--如何模拟高并发访问一个脚本:apache安装文件的bin/ab.exe可以模拟并发量 -c 模拟多少并发量 -n 一共请求多少次 http://请求的脚本
例如:cmd: apache安装路径/bin/ab.exe -c 10 -n 10 http://web.test.com/test.php

【切入正题】
MYSQL中的锁:
语法 :
LOCK TABLE 表名1 READ|WRITE, 表名2 READ|WRITE .................. 【锁表】
UNLOCK TABLES  【释放表】


Read:读锁|共享锁 : 所有的客户端只能读这个表不能写这个表
Write:写锁|排它锁: 所有当前锁定客户端可以操作这个表,其他客户端只能阻塞
注意:在锁表的过程中只能操作被锁定的表,如果要操作其他表,必须把所有要操作的表都锁定起来!

PHP中的文件锁 (锁的是文件,不是表)
文件锁的文件与表有什么关系?:一点关系也没有,与令牌相似,谁拿到谁操作。所以表根本没锁。
测试时,有个文件就行,叫什么名无所谓

总结:
项目中应该只使用PHP中的文件锁,尽量避免锁表,因为如果表被锁定了,那么整个网站中所有和这个表相关的功能都被拖慢了(例如:前台很多用户一直下订单,商品表mysql锁表,其他与商品表相关的操作一直处于阻塞状态【读不出来商品表】,因为一个功能把整个网站速度拖慢)。

我的一个项目就是O2O外卖,中午12-2点,晚上6点都是订单高并发时,这种情况下,MySQL锁显然是不考虑的,用户体验太差。其实根据实际的需求,外卖可以不用设计库存量的,当然除了秒杀活动模块还是需要php文件锁的。

应用场景:
1. 高并发下单时,减库存量时要加锁
2. 高并发抢单、抢票时要使用

MySQL锁示例代码:

<?php
/**
模拟秒杀活动-- 商品100件
CREATE TABLE a
(
    id int comment '模拟100件活动商品的数量'
);
INSERT INTO a VALUES(100);
模仿:以10的并发量访问这个脚本!    使用apache自带的ab.exe软件
 */
error_reporting(0);
mysql_connect('localhost','root','admin123');
mysql_select_db('test');

# mysql 锁
mysql_query('LOCK TABLE a WRITE');// 只有一个客户端可以锁定表,其他客户端阻塞在这
$rs = mysql_query('SELECT id FROM a');
$id = mysql_result($rs, 0, 0);
if($id > 0)
{
    --$id;
    mysql_query('UPDATE a SET id='.$id);
}

# mysql 解锁
mysql_query('UNLOCK TABLES');

 
PHP文件锁示例代码:

<?php
/**
模拟秒杀活动-- 商品100件
CREATE TABLE a
(
    id int comment '模拟100件活动商品的数量'
);
INSERT INTO a VALUES(100);
模仿:以10的并发量访问这个脚本!    使用apache自带的ab.exe软件
 */
error_reporting(0);
mysql_connect('localhost','root','admin123');
mysql_select_db('test');
# php中的文件锁
$fp = fopen('./a.lock', 'r'); // php的文件锁和表没关系,随便一个文件即可
flock($fp, LOCK_EX);// 排他锁


$rs = mysql_query('SELECT id FROM a');
$id = mysql_result($rs, 0, 0);
if($id > 0)
{
    --$id;
    mysql_query('UPDATE a SET id='.$id);
}
# php的文件锁,释放锁
flock($fp, LOCK_UN);
fclose($fp);

 

1
6
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    php mysql安全机制

    综上所述,PHP与MySQL的安全机制涵盖了多个方面,包括但不限于访问控制、权限管理、加密通信、数据备份、防火墙配置、SQL注入防护以及定期更新和补丁应用等。这些措施共同构建了一个多层次的安全防御体系,旨在保护...

    PHP6与MySQL5-php6.rar

    在互联网开发领域,PHP和MySQL是两个非常重要的工具,尤其对于初学者来说,它们提供了构建动态网站的简单而强大的平台。虽然PHP6并未正式发布,但这个“PHP6与MySQL5”主题仍具有一定的学习价值,因为它可能包含了对...

    《PHP和MySQL Web开发》(原书第4版)—源代码

    《PHP和MySQL Web开发》(原书第4版)是一本经典的编程教材,专注于使用PHP与MySQL技术构建动态Web应用程序。这本书的源代码包含了作者在书中提到的各种示例、练习和项目,为读者提供了实际操作的机会,加深对理论...

    php+mysql 新闻发布系统

    【PHP+MySQL 新闻发布系统】是一个基于PHP编程语言和MySQL数据库技术开发的动态网站系统。这个系统的主要功能包括新闻的展示、分类管理和后台管理,为用户提供了一个方便、高效的新闻发布和管理平台。 首先,让我们...

    PHP、MySQL和Apache编程导学(原书第4版)

    它还支持多种安全特性,如访问控制、认证机制和加密通信,以确保数据的安全传输。 ### 关联技术 在开发动态网站时,PHP、MySQL和Apache通常与其他技术一起使用,例如CSS和JavaScript,用于前端设计和交互。此外,...

    PHP and MySQL Web Development(Fourth Edition)

    此外,书中还介绍了PHP的session和cookie机制,用于跟踪用户会话和存储用户偏好。并涵盖了文件上传和下载、电子邮件发送、FTP操作等网络功能。对于安全性,书中提到了验证码、XSS防御和CSRF保护等常见Web安全问题的...

    PHP和MySQL Web开发第4版pdf以及源码

    7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 行 8.1.4 值 8.1.5 键 8.1.6 模式 8.1.7 关系 ...

    php Mysql 开发 字典 大全

    10. **PHP sessions与cookies**:掌握如何使用PHP的session和cookie机制来管理用户会话和跟踪用户行为。 11. **面向对象编程**:现代PHP支持面向对象编程,理解类、对象、继承、封装和多态等概念,可以使代码更易于...

    PHP与MySQL程序设计 Beginning PHP and MySQL Third Edition 源码

    《PHP与MySQL程序设计》是学习Web开发领域中PHP和MySQL数据库结合应用的经典教材,第三版更是对前两版的进一步完善和更新。这个压缩包文件包含的就是该书的源码,供读者在学习过程中对照实践,加深理解。 PHP是一种...

    PHP MySQL Apache超强组合

    它支持多种数据库,包括MySQL,提供了丰富的函数库和强大的错误处理机制。PHP的优势在于其易于学习,语法简洁,同时具备跨平台性,能在Windows、Linux等多种操作系统上运行。此外,PHP还可以与其他Web服务接口,如...

    php和mysqlweb开发书籍推荐

    根据提供的文件信息,“php和mysql web开发书籍推荐”这一标题明确指出了文章的主题,即推荐适合学习PHP与MySQL Web开发的书籍。而“php和mysql web开发书籍脚本宝典”这一描述则进一步强调了书籍内容的专业性和实用...

    PHP_MySQL.tar.gz_PHP + mysql_mysql 教程_mysql教程_php_php mysql

    《精通PHP+MySQL应用开发.pdf》这本书是学习PHP和MySQL的理想教材,它涵盖了从基础到高级的主题,包括数据库设计、PHP编程、安全实践、性能优化等方面,适合初学者和有一定经验的开发者参考。 总结,PHP与MySQL的...

    PHP与MYSQL彻底研究6

    根据给定的信息,“PHP与MYSQL彻底研究6”这一标题及描述虽然没有提供具体的知识点细节,但结合“PHP”和“MYSQL”的标签可以推断出这是一份关于PHP编程语言与MySQL数据库系统相结合进行深入学习的资料。接下来,我...

    PHP和MySQLWeb开发第三版(光盘源码)

    6. 错误和日志:理解PHP的错误处理机制,学习如何记录和分析错误日志,以优化代码性能。 在MySQL方面,你可以学到: 1. 数据库设计:了解关系型数据库的基本概念,学习如何创建和设计数据库模式,包括ER图和范式...

    PHP与mysql大揭秘

    在IT领域,PHP和MySQL是两个非常重要的技术,它们经常被联合使用来构建动态网站和应用程序。本篇文章将深入探讨这两个技术的结合,以及如何在PHP中进行有效的MySQL数据库操作。 PHP(Hypertext Preprocessor)是一...

    PHP和Mysql Web开发完整源代码

    了解如何设置和使用PHP的错误报告机制,以及调试PHP代码的方法,这对于任何开发者来说都是必不可少的技能。 8. 动态内容生成: 可能会包括动态生成RSS feeds、电子邮件发送、用户注册和登录功能、文件上传下载等...

    原创的一个PHP+MYSQL论坛

    【标题】"原创的一个PHP+MYSQL论坛"是一个基于PHP编程语言和MySQL数据库系统的论坛软件解决方案。这个论坛系统是由开发者独立创建的,旨在提供一个在线讨论平台,用户可以在上面发表话题、进行互动交流。PHP是一种...

    PHP 5 + MYSQL 5 Web应用开发宝典

    《PHP 5 + MYSQL 5 Web应用开发宝典》是一本深入探讨PHP和MySQL结合进行Web应用程序开发的专业书籍。PHP是一种广泛使用的开源脚本语言,特别适用于Web开发,而MySQL则是一款高效、可靠的开源关系型数据库管理系统。...

    PHP小型项目(session机制、mysql连接)

    在本PHP小型项目中,我们将深入探讨PHP与MySQL的整合以及如何利用session机制来实现用户登录状态的持久化。PHP是一种广泛使用的服务器端脚本语言,尤其适合Web开发,而MySQL则是世界上最流行的开源关系型数据库管理...

Global site tag (gtag.js) - Google Analytics