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 htmlentities和htmlspecialchars 的区别
Aug 18 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
python操作CouchDB的方法
2014/10/08 Python
Django中几种重定向方法
2015/04/28 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
python2和python3哪个使用率高
2020/06/23 Python
告诉你怎样写创业计划书
2014/01/27 职场文书
优秀幼教自荐信
2014/02/03 职场文书
大型会议接待方案
2014/03/01 职场文书
旅游安全协议书
2014/04/21 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
承诺保证书格式
2015/02/28 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js