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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
php中iconv函数使用方法
May 24 PHP
检测png图片是否完整的php代码
Sep 06 PHP
PHP安全防范技巧分享
Nov 03 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
PHP检测接口Traversable用法详解
Dec 29 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
如何去掉文章里的 html 语法
2006/10/09 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
PHP读取Excel类文件
2017/05/15 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
Linux下python制作名片示例
2018/07/20 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python列表list操作相关知识小结
2020/01/29 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
个人作风剖析材料
2014/02/02 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
2015年端午节活动总结
2015/02/11 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL