phplock(php进程锁) v1.0 beta1


Posted in PHP onNovember 24, 2009

在web开发中我们经常对我们的数据库耗时操作做缓存,但是可能出现一个陷阱,在缓存失效的一瞬间,大量的访问得到缓存失效的标示,都去后端查询数据库,导致同时大量的数据库耗时查询,出现数据库宕机等问题。此问题隐藏深,不容易查找。本项目主要用于解决php的进程间锁问题。
示例:

<?php 
/** 
* 测试例子,同时打开两个页面,可以发现总是同时只能一个页面进入到锁区间的代码 
* @link http://code.google.com/p/phplock/ 
* @author sunli 
* @svnversion $Id: test.php 2 2009-11-24 07:14:27Z sunli1223 $ 
* @version v1.0 beta1 
* @license Apache License Version 2.0 
* @copyright sunli1223@gmail.com 
*/ 
require 'class.phplock.php'; 
$lock = new PHPLock ( 'lock/', 'lockname' ); 
$lock->startLock (); 
$lock->startLock (); 
//process code 
echo "<span>进入锁</span><br />\r\n"; 
ob_end_flush(); 
flush(); 
ob_flush(); 
sleep ( 5 ); //休眠20秒,模拟并发操作 
echo "执行完成<br />\r\n"; 
$lock->unlock (); 
$lock->endLock (); 
echo "释放锁完成<br />\r\n"; 
/** 
* cache操作 
* 
* @return $array 
*/ 
function getCache($key) { 
    return $cache; 
} 
/** 
* 设置缓存 
* 
* @param string $key 
* @param array $value 
*/ 
function setCache($key,$value) { } 
$cache=getCache($key); 
if (! $cache) { 
    //缓存不存在,开始加锁 
    $lock = new PHPLock ( 'lock/', $key ); 
    $lock->startLock (); 
    $lock->startLock (); 
    //尝试判断缓存是否有数据,可能已经有访问重建缓存了,就不需要再次查询数据库 
    $cache=getCache(); 
    if(!$cache){ 
        //数据库查询操作,代码省略了 
        $data=$dbdata; 
        setCache($key,$data); 
    } 
    //释放锁 
    $lock->unlock (); 
    $lock->endLock (); 
} 
?>

相关文章推荐
PHP 进程锁定问题分析研究
PHP 相关文章推荐
php Mysql日期和时间函数集合
Nov 16 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
php-msf源码详解
Dec 25 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
laravel-admin的多级联动方法
Sep 30 PHP
PHP 进程锁定问题分析研究
Nov 24 #PHP
PHP 递归效率分析
Nov 24 #PHP
PHP 单引号与双引号的区别
Nov 24 #PHP
PHP小程序自动提交到自助友情连接
Nov 24 #PHP
php 引用(&amp;)详解
Nov 20 #PHP
php+javascript的日历控件
Nov 19 #PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 #PHP
You might like
php 文章采集正则代码
2009/12/28 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
python实现二叉查找树实例代码
2018/02/08 Python
Python全排列操作实例分析
2018/07/24 Python
python内置数据类型之列表操作
2018/11/12 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
python类的实例化问题解决
2019/08/31 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
思想品德自我评价
2014/02/04 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
助残日活动总结
2014/08/27 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server