
/ /使用memache作为锁定过程
类lock_processlock {
密钥前缀
保护slockkeypre美元;
重试间隔
保护ilockretryinterval美元;
/ /重试次数
保护ilockretrycount美元;
过期时间锁定
保护ilockcachetimeout美元;
在回调函数到期日后锁定
保护onlocktimeoutfunc美元;
/ / memache例子
保护omemcache美元;
Memcache / /存储失败后的重试次数
保护imemcacheretrycount美元;
公共功能__construct($ onlocktimeoutfunc = null){
alockconfig美元= get_config('锁定');
美元-> slockkeypre =自我::lock_key_pre;
美元-> ilockretryinterval =自我::lock_retry_interval;
美元-> ilockretrycount =自我::lock_retry_count;
美元-> ilockcachetimeout =自我::lock_cache_timeout;
美元-> imemcacheretrycount =自我::lock_cache_timeout;
如果(!onlocktimeoutfunc美元){
如果锁不成功,则调用回调函数,如果没有回调函数与
onlocktimeoutfunc美元= 'onlocktimeout;
}
美元-> onlocktimeoutfunc = $ onlocktimeoutfunc;
}
连接其他服务器
* /
公共函数连接(){
如果(!isset(美元-> omemcache)){
美元-> omemcache =新(后面);
美元omemcache ->连接->('127.0.0.1 ',11211);
}
美元-> omemcache返回;
}
*
添加键memcache
* /
公共addmemcache(SKEY美元,美元价值,美元itimeout){
为($我= 0;美元iimemcacheretrycount){
该=美元美元-> omemcache ->添加(SKEY美元,美元价值,美元itimeout);
如果($纤维){
返回true;
}
如果锁没有成功,那么从新锁中休眠
usleep(美元-> ilockretryinterval×1000);
}
返回false;
}
*
锁
* /
公共功能锁($ slockid){
omemcache美元=美元->连接();
美元美元-> slockkeypre SKEY =。slockid美元;
如果没有成功,可以多次尝试
为($我= 0;我ilockretrycount美元美元;i++){
在这里,可以轻松设置值的值。
如果(美元-> addmemcache($ SKEY,1,美元-> ilockcachetimeout)){
返回true;
}
如果锁没有成功,那么从新锁中休眠
usleep(美元-> ilockretryinterval×1000);
}
如果不成功,则锁定失败,调用回调函数。也就是说,在处理完操作失败后
如果(is_callable(美元-> onlocktimeoutfunc)){
调用函数
call_user_func(美元-> onlocktimeoutfunc);
}
}
*
解锁操作
* /
公共功能解锁($ slockid){
omemcache美元=美元->连接();
美元美元-> slockkeypre SKEY =。slockid美元;
删除键
返回omemcache美元-> ->删除($ SKEY);
}
如果锁不成功,则执行以下操作
* /
公共功能onlocktimeout(){
回声(锁定超时);
}
}
应用程序
$点=新lock_processlock();
lockresource美元=测试;
锁定
$点->锁($ lockresource);
解锁
$点->解锁($ lockresource);