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
ADODB类使用
Nov 25 PHP
php 数组二分法查找函数代码
Feb 16 PHP
选择PHP作为网站开发语言的原因分享
Jan 03 PHP
浅析php学习的路线图
Jul 10 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
php中动态变量用法实例
Jun 10 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 PHP
PhpSpreadsheet设置单元格常用操作汇总
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
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
xml+php动态载入与分页
2006/10/09 PHP
PHP伪静态页面函数附使用方法
2008/06/20 PHP
openPNE常用方法分享
2011/11/29 PHP
php中异常处理方法小结
2015/01/09 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
python多进程实现文件下载传输功能
2018/07/28 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
详解python的变量缓存机制
2021/01/24 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
普通简短的个人自我评价
2014/02/15 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js