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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
如何过滤高亮显示非法字符
Oct 09 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
yii添删改查实例
Nov 16 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP经典实用正则表达式小结
May 04 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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下Memcached入门实例解析
2015/01/05 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
PHP异常处理Exception类
2015/12/11 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
php数据序列化测试实例详解
2017/08/12 PHP
Javascript的一种模块模式
2008/03/22 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python日期操作学习笔记
2008/10/07 Python
Python 字符串定义
2009/09/25 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
pytorch进行上采样的种类实例
2020/02/18 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
自我鉴定标准格式
2014/03/19 职场文书
理想演讲稿范文
2014/05/21 职场文书
公司股东出资证明书
2014/11/01 职场文书
基层工作经验证明样本
2014/11/16 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
毕业论文致谢信
2015/05/14 职场文书
售房协议书范本
2015/08/11 职场文书
python xlwt模块的使用解析
2021/04/13 Python
用Java实现简单计算器功能
2021/07/21 Java/Android