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 相关文章推荐
Zend 输出产生XML解析错误
Mar 03 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP 编写大型网站问题集
May 07 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
10个简化PHP开发的工具
Dec 25 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
详解no input file specified 三种解决方法
Nov 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
javascript 写类方式之九
2009/07/05 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
微信小程序如何实现全局重新加载
2019/06/05 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python的标准模块包json详解
2017/03/13 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
市场营销管理制度
2014/01/29 职场文书
公积金具结保证书
2015/05/11 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
广播体操比赛主持词
2015/06/29 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书