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中使用模板的方法
May 24 PHP
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
php创建session的方法实例详解
Jan 27 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
详解PHP中的null合并运算符
Dec 30 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
php 浮点数比较方法详解
May 05 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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 中检查或过滤IP地址的实现代码
2011/11/27 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
python实现简易通讯录修改版
2018/03/13 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python3 实现口罩抽签的功能
2020/03/11 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
数据库基础的一些面试题
2012/02/25 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
建筑专业自我鉴定
2013/10/22 职场文书
五年级语文教学反思
2014/01/30 职场文书
十佳家长事迹材料
2014/08/26 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
《水上飞机》教学反思
2016/02/20 职场文书