美文网首页
php+redis实现加锁,防止超卖、抢购

php+redis实现加锁,防止超卖、抢购

作者: 风度翩翩的程序猿 | 来源:发表于2022-10-22 15:18 被阅读0次
自己封装一个加锁的类
<?php
// 增加redis锁 避免同时下单
class Rlock {
  // $scene 为场景值 随意填写
    protected $lockId;// 记录加锁的客户端id
    public function __construct() {
        $redis = new Redis();
        $redis->connect('127.0.0.1',6379);
        
        $redis->auth('123456'); //密码验证
      
        $this->redis = $redis;
    }
    // 加锁
    public function lock($scene){
        $res = false;
        $time = 5;
        while($time-- >0){
            // 加锁 普通盲盒场景下
            $valule = session_create_id();// 生成不重复的字符串
            $res = $this->redis->set($scene,$valule,["NX","EX"=>5]);
            if($res){
                // 加锁成功 记录下当前的value值
                $this->lockId[$scene] = $valule;
                break;// 加锁成功 跳出循环
            }
        }
        return $res;
    }
    
    // 解锁
    public function unLock($scene){
        // 能够删除自己的锁,不应该删除别人的锁
        if($this->lockId[$scene]){
            $value = $this->redis->get($scene); // 从redis当中获取value值
            $id = $this->lockId[$scene];// 当前请求的记录值
            // 从redis当中获取的id 跟当前请求记录的id是否是同一个
            if($value == $id){
                return $this->redis->del($scene); // 删除锁
            }
        }
        return false;
    }
  
  
}


然后进行调用加锁和解锁的方法

相关文章

网友评论

      本文标题:php+redis实现加锁,防止超卖、抢购

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