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'=>'请稍后重试']; }

    推荐阅读