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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php计算当前程序执行时间示例
Apr 24 PHP
深入理解PHP中的global
Aug 19 PHP
PHP答题类应用接口实例
Feb 09 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
Symfony的安装和配置方法
Mar 17 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
使用PHP开发留言板功能
Nov 19 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
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
vue 请求后台数据的实例代码
2017/06/22 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
js代码实现轮播图
2020/05/04 Javascript
使用python遍历指定城市的一周气温
2017/03/31 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
解读python logging模块的使用方法
2018/04/17 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
公务员转正鉴定材料
2014/02/11 职场文书
食品工程专业求职信
2014/06/15 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
python实现大文本文件分割成多个小文件
2021/04/20 Python
解决python3安装pandas出错的问题
2021/05/20 Python
php访问对象中的成员的实例方法
2021/11/17 PHP