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 相关文章推荐
使用sockets:从新闻组中获取文章(三)
Oct 09 PHP
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
php中的三元运算符使用说明
Jul 03 PHP
php中设置多级目录session的问题
Aug 08 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
php三种实现多线程类似的方法
Oct 30 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
Laravel 错误提示本地化的实现
Oct 22 PHP
PHP实现简易图形计算器
Aug 28 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
cache_lite试用
2007/02/14 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
Node.js事件驱动
2015/06/18 Javascript
JavaScript中this详解
2015/09/01 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Django后台admin的使用详解
2019/07/08 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
干部现实表现材料
2014/02/13 职场文书
亲属关系公证书样本
2015/01/23 职场文书
运动会新闻稿
2015/07/17 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL