PHP並行作業時的加鎖功能_PHP教程

來源:互聯網
上載者:User
有這麼一個需求:組建檔案的時候,由於多使用者都有許可權進行產生,防止並發下,導致產生的結果出現錯誤,需要對產生的過程進行加鎖,只容許一個使用者在一個時間內進行操作,這個時候就需要用到鎖了,將這個操作過程鎖起來。在用了cache的時候,cache失效可能導致瞬間的多數並發請求穿透到資料庫此時也可以得需要用鎖在同一併發的過程中將這個伺服器用戶端檔案鎖。

針對以上的2種情況,現在的解決方案是對處理過程進行鎖機制,通過PHP實現如下:

用到了Eaccelerator的記憶體鎖和檔案鎖,原理:判斷系統中是否安了EAccelerator如果有則使用記憶體鎖,如果不存在,則進行檔案鎖。根據帶入的key的不同可以實現多個鎖直接的平行處理,類似Innodb的行級鎖。

具體類如下:

eAccelerator = function_exists("eaccelerator_lock");if(!$this->eAccelerator){$this->path = $path.($this->_mycrc32($name) % $this->hashNum).'.txt';}$this->name = $name;}/** * crc32 * crc32封裝 * @param int $string * @return int */private function _mycrc32($string){$crc = abs (crc32($string));if ($crc & 0x80000000) {$crc ^= 0xffffffff;$crc += 1;}return $crc;}/** * 加鎖 * Enter description here ... */public function lock(){//如果無法開啟ea記憶體鎖,則開啟檔案鎖if(!$this->eAccelerator){//配置目錄許可權可寫$this->fp = fopen($this->path, 'w+');if($this->fp === false){return false;}return flock($this->fp, LOCK_EX);}else{return eaccelerator_lock($this->name);}}/** * 解鎖 * Enter description here ... */public function unlock(){if(!$this->eAccelerator){if($this->fp !== false){flock($this->fp, LOCK_UN);clearstatcache();}//進行關閉fclose($this->fp);}else{return eaccelerator_unlock($this->name);}}}?>

使用如下:

$lock = new CacheLock('key_name');$lock->lock();//logic here$lock->unlock();//使用過程中需要注意下檔案鎖所在路徑需要有寫入權限.

http://www.bkjia.com/PHPjc/752442.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752442.htmlTechArticle有這麼一個需求:組建檔案的時候,由於多使用者都有許可權進行產生,防止並發下,導致產生的結果出現錯誤,需要對產生的過程進行加鎖,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.