php进程锁
来源:互联网 发布:串口通信软件破解 编辑:程序博客网 时间:2024/06/11 21:56
PHP在多进程模式下(并发的web访问)由于没有内置的锁支持,在处理一些资源的之后,很容易出现并发性问题。
在web开发中我们经常对我们的数据库耗时操作做缓存,但是可能出现一个陷阱,在缓存失效的一瞬间,大量的访问得到缓存失效的标示,都去后端查询数据库,导致
同时大量的数据库耗时查询,出现数据库宕机等问题。此问题隐藏深,不容易查找。本项目主要用于解决php的进程间锁问题。
php
/**
* 测试例子,同时打开两个页面,可以发现总是同时只能一个页面进入到锁区间的代码
* @link http://code.google.com/p/phplock/
* @author sunli
* @blog http://sunli.cnblogs.com
* @svnversion $Id: test.php 4 2009-11-25 05:05:13Z 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 ();
$status = $lock->Lock ();
if (! $status) {
echo "加锁失败";
exit ();
}
//process code
echo "进入锁
\r\n";
ob_end_flush ();
flush ();
ob_flush ();
sleep ( 10 ); //休眠20秒,模拟并发操作
echo "执行完成
\r\n";
$lock->unlock ();
$lock->endLock ();
echo "释放锁完成
\r\n";
/**
* cache操作
*
* @return $array
*/
function getCache($key) {
return $cache;
}
/**
* 设置缓存
*
* @param string $key
* @param array $value
*/
function setCache($key, $value) {
}
$key = 'cachekey';
$cache = getCache ( $key );
if (! $cache) {
//缓存不存在,开始加锁
$lock = new PHPLock ( 'lock/', $key );
$lock->startLock ();
$lock->Lock ();
//尝试判断缓存是否有数据,可能已经有访问重建缓存了,就不需要再次查询数据库
$cache = getCache ( $key );
if (! $cache) {
//数据库查询操作,代码省略了
$data = $dbdata;
setCache ( $key, $data );
}
//释放锁
$lock->unlock ();
$lock->endLock ();
}
?>
- php进程锁
- php进程
- php中进程锁和多进程的实现
- PHP 中的一个简单的进程锁
- PHP多进程编程
- php多进程
- PHP多进程编程
- php守护进程
- PHP的多进程
- PHP 做守护进程
- PHP 守护进程类
- php进程与线程
- php进程控制
- php的多进程
- php守护进程
- PHP进程间通信
- PHP的多进程
- php进程相关
- Linux内核中container_of宏的理解
- jpeg-6b交叉编译
- MapReduce:默认Counter的含义
- Js 事件实例
- web调用cab不能注册dll、不能运行exe文件问题解决
- php进程锁
- 利用vim 快速格式化文本
- 详解ios文件系统文件目录读写操作
- vi 删除空格 换行命令
- Java关键字transient和volatile小结(转)
- 译文:身未动,心已知
- c#编程之使用属性(get...set...)
- imx53 uboot 的spi nor驱动的执行过程?
- 再见,黑客江湖