YurunLock
增加支持Redis、Memcache、Memcached登录验证
PHP 차단 잠금 장치 및 비 블로킹 잠금 장치에는 동시 잠금 장치의 반복 실행에 대한 내장 솔루션이 있습니다. 현재 파일, Redis, Memcache, Memcached를 지원합니다.
프로젝트에서 composer.json 파일에 다음 내용을 추가하십시오.
{
"require" : {
"yurunsoft/yurun-lock" : " dev-master "
}
}중국 사용자가 작곡가를 사용하는 경우 https://pkg.phpcomposer.com/을 확인하십시오.
<?php
$ 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
{
// 获取锁失败
} <?php
$ 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
{
// 获取锁失败
}파일, redis, memcache, memcached를 지원하기 위해 작동 객체를 직접 전달하십시오. 객체의 반복적 인 인스턴스화를 방지하여 메모리와 네트워크 부담을 유발할 수 있습니다.
// 文件
$ 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 ();