PHP中使用Memache作為進(jìn)程鎖的操作類分享
來源:易賢網(wǎng) 閱讀:1201 次 日期:2015-04-03 10:28:03
溫馨提示:易賢網(wǎng)小編為您整理了“PHP中使用Memache作為進(jìn)程鎖的操作類分享”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了PHP中使用Memache作為進(jìn)程鎖的操作類分享,本文直接給出類實(shí)現(xiàn)代碼以及應(yīng)用示例,需要的朋友可以參考下

<?php

// 使用Memache 作為進(jìn)程鎖

class lock_processlock{

// key 的前綴

protected $sLockKeyPre;

// 重試間隔

protected $iLockRetryInterval;

//重試次數(shù)

protected $iLockRetryCount;

//鎖的過期時(shí)間

protected $iLockCacheTimeout;

// 鎖過期后的回調(diào)函數(shù)

protected $onLockTimeoutFunc;

// memache 的實(shí)例

protected $oMemcache;

// 存儲memcache失敗后重試次數(shù)

protected $iMemcacheRetryCount;

public function __construct ($onLockTimeoutFunc=NULL) {

$aLockConfig = get_config('', 'lock');

$this->sLockKeyPre = self::LOCK_KEY_PRE;

$this->iLockRetryInterval = self::LOCK_RETRY_INTERVAL;

$this->iLockRetryCount =self::LOCK_RETRY_COUNT;

$this->iLockCacheTimeout = self::LOCK_CACHE_TIMEOUT;

$this->iMemcacheRetryCount = self::LOCK_CACHE_TIMEOUT;

if(!$onLockTimeoutFunc){

// 如果加鎖不成功則調(diào)用回調(diào)函數(shù),如果沒有回調(diào)函數(shù),使用本類中所帶的

$onLockTimeoutFunc ='onLockTimeout' ;

}

$this->onLockTimeoutFunc = $onLockTimeoutFunc;

}

/**

連接memcache 服務(wù)器

*/

public function connect() {

if (! isset ( $this->oMemcache )) {

$this->oMemcache = new Memcache ();

$this->oMemcache->connect ( '127.0.0.1', 11211 );

}

return $this->oMemcache;

}

/*

向MeMcache中添加 key

*/

public addMemcache($sKey, $sValue, $iTimeout){

for($i= 0 ; $i<$this->iMemcacheRetryCount){

$bRes = $this->oMemcache->add($sKey, $sValue, $iTimeout);

if($bRes){

return true ;

}

// 如果加鎖不成功,sleep 之后,從新加鎖

usleep($this->iLockRetryInterval*1000);

}

return false ;

}

/*

加鎖

*/

public function lock($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre . $sLockID;

// 加鎖如果不成功可以多試幾次

for($i = 0 ; $i <$this->iLockRetryCount ; $i++){

// 這里設(shè)置value 的值可以隨便設(shè)置

if($this->addMemcache($sKey,'1',$this->iLockCacheTimeout)){

return true ;

}

// 如果加鎖不成功,sleep 之后,從新加鎖

usleep($this->iLockRetryInterval*1000);

}

// 若還不成功,則加鎖失敗,調(diào)用回調(diào)函數(shù),.也就是失敗后需要處理的操作

if(is_callable($this->onLockTimeoutFunc)){

// 調(diào)用函數(shù)

call_user_func($this->onLockTimeoutFunc);

}

}

/*

解鎖操作

*/

public function unlock($sLockID){

$oMemcache = $this->connect();

$sKey = $this->sLockKeyPre . $sLockID;

// 刪除key

return $this->oMemcache->delete($sKey);

}

/**

如果加鎖不成功,則執(zhí)行如下操作

*/

public function onLockTimeout(){

echo ("加鎖超時(shí)");

}

}

// 應(yīng)用實(shí)例

$oLock = new lock_processlock();

$lockResource = "test";

// 加鎖

$oLock->lock($lockResource);

// 解鎖

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP中使用Memache作為進(jìn)程鎖的操作類分享
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)