美文网首页
PHP使用redis锁防止并发访问

PHP使用redis锁防止并发访问

作者: 打工是不可能打工的1 | 来源:发表于2020-05-08 10:00 被阅读0次

锁必须具备的特点

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锁防止并发访问

    锁必须具备的特点 1、互斥: 任意时刻, 只能有一个客户端获得锁 2、不会死锁: 客户端持有锁期间崩溃, 没有主动...

  • php 使用redis锁限制并发访问类

    1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用...

  • php+redis消息队列实现抢购功能

    实现功能: 基于redis队列,防止高并发的超卖 基于mysql的事务加排它锁,防止高并发的超卖基于redis队列...

  • redis 面试题

    技巧:1、redis + lua 解决高并发场景下的写操作2、redis 分布式锁,防止并发写3、redis 队列...

  • Redis 的并发竞争问题如何解决

    Redis 为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis 本身没有锁的概念,Redis 对于...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • redis场景应用

    抢购 使用push pop防止物品库存为负数

  • redis高级功能-分布式锁

    同步锁 多线程访问共享资源的时候,为了防止发生资源争抢,持有资源不能释放等一系列问题,就需要锁来防止并发访问共享资...

  • 什么是锁?

    锁的相关概念 锁被设计出来的的初衷是为了处理并发访问,两个请求访问相同资源时候,为了防止发生冲突,创建一个锁文件,...

  • elasticsearch乐观锁

    悲观锁和乐观锁 1、悲观并发控制这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问资源以防止冲...

网友评论

      本文标题:PHP使用redis锁防止并发访问

      本文链接:https://www.haomeiwen.com/subject/uguxnhtx.html