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之第四天
Oct 09 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
May 31 PHP
实现php删除链表中重复的结点
Sep 27 PHP
PHP http请求超时问题解决方案
Nov 13 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
文件上传程序的全部源码
2006/10/09 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP实现的购物车类实例
2015/06/17 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
babel基本使用详解
2017/02/17 Javascript
Vue响应式原理详解
2017/04/18 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
静态变量和实例变量的区别
2015/07/07 面试题
3的组成教学反思
2014/04/30 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
工伤私了协议书范本
2014/11/24 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
Pytest中skip skipif跳过用例详解
2021/06/30 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL