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 常见郁闷问题答解
Nov 25 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
php公用函数列表[正则]
Feb 22 PHP
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
基于php权限分配的实现代码
Apr 28 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
php计算函数执行时间的方法
Mar 20 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
Laravel 批量更新多条数据的示例
Nov 27 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通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
PyTorch预训练的实现
2019/09/18 Python
python编写俄罗斯方块
2020/03/13 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
特步官方商城:Xtep
2017/03/21 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
商务英语专业毕业生自荐信
2013/11/05 职场文书
八一建军节活动方案
2014/02/10 职场文书
学校后勤岗位职责
2014/02/19 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python