php+redis乐观锁实现商品秒杀

public function watch($id,$uid){
        $redis = new \Redis();
        $redis->connect('127.0.0.1',6379);
        $redis->auth('qiusuo521.');
        //监视销量,给key打上标签,
        $redis->watch("sales");
        $sales = $redis->get('sales');

        $store = 3;
        if($sales >= $store){
            return false;
        }
        //记录用户信息,更新库存
        //保证这一组命令,要么全部成功,要么都不成功
        $redis->multi();//开始事务
        $redis->incr("sales");//增加销量
        $redis->lPush('user',$uid . ':' . $id);
        $result = $redis->exec();//提交,判断当前的key是否被某个客户端修改了

        if($result){
            $res = Db::table('products')->where('id', $id)->setDec('wareHouseCount');
            if($res){
                return true;
            }else{
                return false;
            }
        }
    }

    public function a(){
        $id = 1;
        $uid = 1;
        $watch = $this->watch($id,$uid);
        $m3_result = new M3Result();
        if($watch){
            $m3_result->status = 1;
            $m3_result->message = "抢购成功!";
        }else{
            $m3_result->status = 0;
            $m3_result->message = "抢购失败!";
        }
        return $m3_result->toJson();
    }

猜你喜欢

转载自blog.csdn.net/qq_43737121/article/details/113546454