PHP code example of yurunsoft / yurun-lock

1. Go to this page and download the library: Download yurunsoft/yurun-lock library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

yurunsoft / yurun-lock example snippets



$lock = new \Yurun\Until\Lock\File('我是锁名称');

$lock->lock(); // 阻塞锁
// TODO:在这里做你的一些事情
$lock->unlock(); // 解锁

// 带回调的阻塞锁,防止并发锁处理重复执行
result = $lock->lock(
	function(){
		// TODO:在这里做你的加锁后处理的任务

	},
	function(){
		// 判断是否其它并发已经处理过任务
		return false;
	}
);
switch($result)
{
	case LockConst::LOCK_RESULT_CONCURRENT_COMPLETE:
		// 其它请求已处理
		break;
	case LockConst::LOCK_RESULT_CONCURRENT_UNTREATED:
		// 在当前请求处理
		break;
	case LockConst::LOCK_RESULT_FAIL:
		// 获取锁失败
		break;
}

// 不阻塞锁,获取锁失败就返回false
if($lock->unblockLock())
{
	// TODO:在这里做你的一些事情
}
else
{
	// 获取锁失败
}


$lock = new \Yurun\Until\Lock\Redis(	// 可以把Redis替换成Memcache/Memcached,下面代码用法相同
	'我是锁名称',
	array(
		'host'		=>	'127.0.0.1',
		'port'		=>	11211,
		'timeout'	=>	0,
		'pconnect'	=>	false,
	), // 连接配置,留空则为默认值
	0, // 获得锁等待超时时间,单位:毫秒,0为不限制,留空则为默认值
	1, // 获得锁每次尝试间隔,单位:毫秒,留空则为默认值
	3, // 锁超时时间,单位:秒,留空则为默认值
);

$lock->lock(); // 阻塞锁
// TODO:在这里做你的一些事情
$lock->unlock(); // 解锁

// 带回调的阻塞锁,防止并发锁处理重复执行
result = $lock->lock(
	function(){
		// TODO:在这里做你的加锁后处理的任务

	},
	function(){
		// 判断是否其它并发已经处理过任务
		return false;
	}
);
switch($result)
{
	case LockConst::LOCK_RESULT_CONCURRENT_COMPLETE:
		// 其它请求已处理
		break;
	case LockConst::LOCK_RESULT_CONCURRENT_UNTREATED:
		// 在当前请求处理
		break;
	case LockConst::LOCK_RESULT_FAIL:
		// 获取锁失败
		break;
}

// 不阻塞锁,获取锁失败就返回false
if($lock->unblockLock())
{
	// TODO:在这里做你的一些事情
}
else
{
	// 获取锁失败
}

// 文件
$fp = fopen('1.txt', 'w+');
$lock = new \Yurun\Until\Lock\File('我是锁名称', $fp);
$lock->lock();
// 做一些事情
$lock->unlock();
fclose($fp);

// redis、memcache、memcached同理
$redis = new \Redis;
$redis->connect($host, $port, $timeout);
$lock = new \Yurun\Until\Lock\Redis('我是锁名称', $$redis);
$lock->lock();
// 做一些事情
$lock->unlock();
redis->close();