国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP中使用Memache作為進程鎖的操作類分享

2024-05-04 21:55:57
字體:
來源:轉載
供稿:網友

 這篇文章主要介紹了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); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洞头县| 吴旗县| 泾源县| 镇坪县| 云龙县| 托克托县| 长春市| 封开县| 腾冲县| 岗巴县| 鄂温| 壤塘县| 且末县| 正宁县| 确山县| 赣州市| 五指山市| 视频| 湾仔区| 图们市| 宝鸡市| 黔西| 中山市| 乐陵市| 贵州省| 长治县| 四会市| 慈溪市| 中山市| 巴马| 朝阳市| 桑植县| 区。| 邵东县| 文山县| 潜山县| 喀喇沁旗| 赤城县| 安顺市| 报价| 望城县|