并发加锁
如果不是redis 集群,可以用multi
如果是集群就不行了,因为访问的redis是随机的
function lock($id,$expire){
$id = "lock_".$id;
$now = time();
$expireTime = $now + $expire;
$redis = Factory::getRedis();
$reult = $redis->setnx($id,$expireTime);
if($result){//获得锁
return true;
}
//防止死锁判断过期
$value = $redis->get($id);
//锁过期
if($value <= $now){
//竞争获取锁
$value = $redis->getSet($id,$expireTime);
if($value <= $now){
return true;
}
}
return false;
}