PHP使用redis锁防止并发访问

锁必须具备的特点

1、互斥: 任意时刻, 只能有一个客户端获得锁
2、不会死锁: 客户端持有锁期间崩溃, 没有主动解除锁, 能保证后续的其他客户端获得锁(加一个短暂的过期时间)
3、锁归属标识: 加锁和解锁的必须是同一个客户端, 客户端不能解掉非自己持有的锁(锁应具备标识)

以下是PHP代码

$redis = new Redis();
$redis->pconnect("127.0.0.1", 6379);
$redis->auth("password");   // 密码验证
$redis->select(1);  // 选择所使用的数据库, 默认有16个
$lock_key = 'LOCK_KEY;
$is_lock = $redis->exists($lock_key);
 if(!$is_lock) { // 如果没有锁
            $redis->set($lock_key, 1, 'nx', 'ex', 4); // 加锁,持续4秒
            try{
                     //业务逻辑
            }catch(Exception $e){
                   $redis->del($lock_key);//发生异常也解锁
            }
            $redis->del($lock_key);
            return ['code' => '0000', 'msg' => '领取成功'];
}else{
            return ['code'=>'1005','msg'=>'请稍后重试'];
}

你可能感兴趣的:(PHP使用redis锁防止并发访问)