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教程