当前位置:Gxlcms > PHP教程 > phplock(php进程锁)v1.0beta1_PHP教程

phplock(php进程锁)v1.0beta1_PHP教程

时间:2021-07-01 10:21:17 帮助过:21人阅读

在web开发中我们经常对我们的数据库耗时操作做缓存,但是可能出现一个陷阱,在缓存失效的一瞬间,大量的访问得到缓存失效的标示,都去后端查询数据库,导致同时大量的数据库耗时查询,出现数据库宕机等问题。此问题隐藏深,不容易查找。本项目主要用于解决php的进程间锁问题。
示例:
代码如下:
  1. <br><!--?php <BR-->/** <br>* 测试例子,同时打开两个页面,可以发现总是同时只能一个页面进入到锁区间的代码 <br>* @link http://code.google.com/p/phplock/ <br>* @author sunli <br>* @svnversion $Id: test.php 2 2009-11-24 07:14:27Z sunli1223 $ <br>* @version v1.0 beta1 <br>* @license Apache License Version 2.0 <br>* @copyright sunli1223@gmail.com <br>*/ <br>require 'class.phplock.php'; <br>$lock = new PHPLock ( 'lock/', 'lockname' ); <br>$lock->startLock (); <br>$lock->startLock (); <br>//process code <br>echo "<span>进入锁</span><br>\r\n"; <br>ob_end_flush(); <br>flush(); <br>ob_flush(); <br>sleep ( 5 ); //休眠20秒,模拟并发操作 <br>echo "执行完成<br>\r\n"; <br>$lock->unlock (); <br>$lock->endLock (); <br>echo "释放锁完成<br>\r\n"; <br>/** <br>* cache操作 <br>* <br>* @return $array <br>*/ <br>function getCache($key) { <br> return $cache; <br>} <br>/** <br>* 设置缓存 <br>* <br>* @param string $key <br>* @param array $value <br>*/ <br>function setCache($key,$value) { <br><br>} <br>$cache=getCache($key); <br>if (! $cache) { <br> //缓存不存在,开始加锁 <br> $lock = new PHPLock ( 'lock/', $key ); <br> $lock->startLock (); <br> $lock->startLock (); <br> //尝试判断缓存是否有数据,可能已经有访问重建缓存了,就不需要再次查询数据库 <br> $cache=getCache(); <br> if(!$cache){ <br> //数据库查询操作,代码省略了 <br> $data=$dbdata; <br> setCache($key,$data); <br> } <br> //释放锁 <br> $lock->unlock (); <br> $lock->endLock (); <br>} <br>?> <br><br>相关文章推荐<br>PHP 进程锁定问题分析研究
  2. <p></p>
  3. <p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/320818.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/320818.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">在web开发中我们经常对我们的数据库耗时操作做缓存,但是可能出现一个陷阱,在缓存失效的一瞬间,大量的访问得到缓存失效的标示,都...</span></p>

人气教程排行