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 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
深入apache host的配置详解
Jun 09 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP多文件上传类实例
Mar 07 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
laravel dingo API返回自定义错误信息的实例
Sep 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
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python验证码识别实例代码
2018/02/03 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
使用python画社交网络图实例代码
2019/07/10 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
详解pytorch创建tensor函数
2022/03/22 Python