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下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
PHP ajax 分页类代码
Nov 13 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
jquery radio 操作代码
2011/03/16 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
jQuery获取元素父节点的方法
2016/06/21 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
在keras里实现自定义上采样层
2020/06/28 Python
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
生产部厂长职位说明书
2014/03/03 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
分公司经理任命书
2014/06/05 职场文书
2015年招生工作总结
2015/05/04 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Python如何导出导入所有依赖包详解
2021/06/08 Python
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
Go语言grpc和protobuf
2022/04/13 Golang
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android