PHP中使用Memache作为进程锁的操作类分享_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:php中判断数组相等的方法以及数组运算符介绍
这篇文章主要介绍了php中判断数组相等的方法以及数组运算符介绍,本文讲解了相关知识并给出实例代码,需要的朋友可以参考下 如何判断两个数组相等呢?其实很简单,用 == 或者 === 就可以了 php手册里说明如下: 那像 array('k'=array())这样的多维数组能用如上方法判断相

 这篇文章主要介绍了PHP中使用Memache作为进程锁的操作类分享,本文直接给出类实现代码以及应用示例,需要的朋友可以参考下

  1. <?php 
  2.   
  3. // 使用Memache 作为进程锁  
  4.   
  5. class lock_processlock{ 
  6.       
  7.       
  8.     // key 的前缀 
  9.     protected $sLockKeyPre
  10.     // 重试间隔 
  11.  protected $iLockRetryInterval
  12.     //重试次数  
  13.  protected $iLockRetryCount
  14.     //锁的过期时间 
  15.  protected $iLockCacheTimeout
  16.  // 锁过期后的回调函数 
  17.  protected $onLockTimeoutFunc
  18.     // memache 的实例 
  19.  protected $oMemcache
  20.     // 存储memcache失败后重试次数  
  21.  protected $iMemcacheRetryCount
  22.       
  23.       
  24.       
  25.       
  26.      public function __construct ($onLockTimeoutFunc=NULL) { 
  27.   $aLockConfig = get_config('''lock'); 
  28.   $this->sLockKeyPre = self::LOCK_KEY_PRE; 
  29.   $this->iLockRetryInterval = self::LOCK_RETRY_INTERVAL; 
  30.   $this->iLockRetryCount =self::LOCK_RETRY_COUNT; 
  31.   $this->iLockCacheTimeout = self::LOCK_CACHE_TIMEOUT; 
  32.   $this->iMemcacheRetryCount = self::LOCK_CACHE_TIMEOUT; 
  33.         if(!$onLockTimeoutFunc){ 
  34.             // 如果加锁不成功则调用回调函数,如果没有回调函数,使用本类中所带的  
  35.             $onLockTimeoutFunc ='onLockTimeout' ;  
  36.         } 
  37.   $this->onLockTimeoutFunc = $onLockTimeoutFunc
  38.  } 
  39.       
  40.       
  41.     /** 
  42.     连接memcache 服务器  
  43.     */ 
  44.     public function connect() { 
  45.         if (! isset ( $this->oMemcache )) { 
  46.             $this->oMemcache = new Memcache (); 
  47.             $this->oMemcache->connect ( '127.0.0.1', 11211 ); 
  48.         } 
  49.         return $this->oMemcache; 
  50.     } 
  51.       
  52.       
  53.     /* 
  54.     向MeMcache中添加 key 
  55.     */ 
  56.     public addMemcache($sKey$sValue$iTimeout){ 
  57.           
  58.         for($i= 0 ; $i<$this->iMemcacheRetryCount){ 
  59.             $bRes = $this->oMemcache->add($sKey$sValue$iTimeout); 
  60.             if($bRes){ 
  61.                 return true ;  
  62.             } 
  63.                 // 如果加锁不成功,sleep 之后,从新加锁 
  64.             usleep($this->iLockRetryInterval*1000); 
  65.               
  66.         } 
  67.         return false ;  
  68.           
  69.     } 
  70.       
  71.       
  72.     /* 
  73.     加锁  
  74.     */ 
  75.     public function lock($sLockID){ 
  76.           
  77.         $oMemcache = $this->connect(); 
  78.      $sKey = $this->sLockKeyPre . $sLockID
  79.           
  80.         // 加锁如果不成功可以多试几次  
  81.           
  82.         for($i = 0 ; $i <$this->iLockRetryCount ; $i++){ 
  83.               
  84.             // 这里设置value 的值可以随便设置  
  85.             if($this->addMemcache($sKey,'1',$this->iLockCacheTimeout)){ 
  86.                 return true ;  
  87.             } 
  88.               
  89.             // 如果加锁不成功,sleep 之后,从新加锁 
  90.             usleep($this->iLockRetryInterval*1000); 
  91.               
  92.         } 
  93.           
  94.         // 若还不成功,则加锁失败,调用回调函数,.也就是失败后需要处理的操作  
  95.         if(is_callable($this->onLockTimeoutFunc)){ 
  96.             // 调用函数  
  97.             call_user_func($this->onLockTimeoutFunc);  
  98.         } 
  99.           
  100.     } 
  101.       
  102.       
  103.     /* 
  104.     解锁操作  
  105.     */ 
  106.     public function unlock($sLockID){ 
  107.           
  108.         $oMemcache = $this->connect(); 
  109.      $sKey = $this->sLockKeyPre . $sLockID
  110.         // 删除key 
  111.         return $this->oMemcache->delete($sKey); 
  112.           
  113.     } 
  114.       
  115.       
  116.     /** 
  117.     如果加锁不成功,则执行如下操作  
  118.     */ 
  119.      public function onLockTimeout(){ 
  120.            
  121.          echo ("加锁超时"); 
  122.      } 
  123.     
  124.   
  125.   
  126.   
  127. // 应用实例  
  128.   
  129.  $oLock = new lock_processlock(); 
  130.  $lockResource = "test"
  131.  // 加锁 
  132.  $oLock->lock($lockResource); 
  133.  // 解锁 
  134.  $oLock->unlock($lockResource); 

分享:smarty模板引擎之分配数据类型
这篇文章主要介绍了smarty模板引擎之分配数据类型,实例分析了smarty模板引擎数据类型的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了smarty模板引擎之分配数据类型用法。分享给大家供大家参考。具体分析如下: 一、分配基本数据 ? 浏览器显示结

来源:模板无忧//所属分类:PHP教程/更新时间:2015-03-31
相关PHP教程