89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Bwsaas
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Copyright (c) 2015~2020 http://www.buwangyun.com All rights reserved.
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Gitee ( https://gitee.com/buwangyun/bwsaas )
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Author: buwangyun <hnlg666@163.com>
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// | Date: 2020-9-28 10:55:00
							 | 
						||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace bw;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use traits\CacheTrait;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** 接口唯一调用锁类
							 | 
						||
| 
								 | 
							
								 * Class Common
							 | 
						||
| 
								 | 
							
								 * @package app\bwmall\model
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class UrlLock
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    use CacheTrait;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private $lock_key = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private $lock_suffix = "-lock-suffix" ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private $time_out = 120;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private $is_lock = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function __construct($lock_key=null,$lock_suffix="",$time_out=null,$err_msg=null)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if($lock_key)$this->lock_key = $lock_key;
							 | 
						||
| 
								 | 
							
								        if($lock_suffix)$this->lock_suffix = $lock_suffix;
							 | 
						||
| 
								 | 
							
								        if($time_out)$this->time_out = $time_out;
							 | 
						||
| 
								 | 
							
								        if($err_msg)$this->setCacheLockErrorMsg($err_msg);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function lock($bool=false){
							 | 
						||
| 
								 | 
							
								        try{
							 | 
						||
| 
								 | 
							
								            $this->getLock($this->lock_key,$this->lock_suffix,$this->time_out);
							 | 
						||
| 
								 | 
							
								        }catch (\Exception|\Throwable $e){
							 | 
						||
| 
								 | 
							
								            $this->is_lock = false;
							 | 
						||
| 
								 | 
							
								            if($bool){
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }else{
							 | 
						||
| 
								 | 
							
								                throw new UrlLockException($e->getMessage());
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $this->is_lock = true;
							 | 
						||
| 
								 | 
							
								        return $this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function free($bool=false){
							 | 
						||
| 
								 | 
							
								        try{
							 | 
						||
| 
								 | 
							
								        $this->freeLock($this->lock_key,$this->lock_suffix);
							 | 
						||
| 
								 | 
							
								        }catch (\Exception|\Throwable $e){
							 | 
						||
| 
								 | 
							
								            if($bool){
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }else{
							 | 
						||
| 
								 | 
							
								                throw new UrlLockException($e->getMessage());
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $this->is_lock = false;
							 | 
						||
| 
								 | 
							
								        return $this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function hasLock(){
							 | 
						||
| 
								 | 
							
								        return $this->is_lock;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function setErrorInfo($msg){
							 | 
						||
| 
								 | 
							
								        $this->setCacheLockErrorMsg($msg);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |