当前位置 : 主页 > 网络编程 > PHP >

RedisLock.php

来源:互联网 收集:自由互联 发布时间:2021-06-28
RedisLock.php _key = self::PREFIX . $key;$this-_redis = $redis;}/** * 设置锁过期时间 * @param Int $ex */public function setExpires($ex) {$this-_expires = max(1, (int)$ex);return $this;}/** * 开始锁 * @param String $id * @return bo
RedisLock.php
 _key = self::PREFIX . $key;
		$this->_redis = $redis;
	}
	
	/**
	 * 设置锁过期时间
	 * @param Int $ex
	 */
	public function setExpires($ex) {
		$this->_expires = max(1, (int)$ex);
		
		return $this;
	}
	
	/**
	 * 开始锁
	 * @param String $id
	 * @return boolean
	 */
	public function begin() {
		$redis = $this->getRedis();

		if( $redis->setnx($this->_key, 1) ) {
			return true;
		}
		
		if( $redis->ttl($this->_key) == -1 ) {
			$redis->expire($this->_key, $this->_expires);
		}

		return false;
	}
	
	/**
	 * 释放
	 * @param String $id
	 */
	public function release() {
		$this->getRedis()->del($this->_key);
	}
	
	private function getRedis() {
		return $this->_redis ? $this->_redis : DHTCache::instance()->getNode($this->_key);
	}
}

/**
 $lock = new RedisLock('abc', $redis);

 $lock->begin();

 // ...

 $lock->release(); 
*/
上一篇:tips-1051767-03.php
下一篇:DHTCache.php
网友评论