php redis分布式锁实现
public function getLock()
{
$LOCK_TIMEOUT = 3;
$lock = 0;
$lock_timeout = 0;
$lock_key = 'lock.foo';
#获取锁start
while ($lock != 1) {
$now = time();
$lock_timeout = $now + $LOCK_TIMEOUT + 1;
$lock = $this->redisObj->setnx($lock_key,$lock_timeout);
if($lock == 1 or intval($now > $this->redisObj->get($lock_key)) and $now > intval($this->redisObj->getset($lock_key,$lock_timeout)) ) {
break;
}else{
sleep(0.001);
}
}
#获取锁end
//执行任务
//释放锁
$now = time();
if($now < $lock_timeout) {
$this->redisObj->del($lock_key);
}
}