thinkphp5使用redis事务实现抢购

发布时间:2022-01-25 10:05:46 阅读:1313次

redis事务实现抢购

        Cache::store('redis')->watch('sales');
        $sales = Cache::store('redis')->rawCommand('get','sales');
        $n = 10;
        if ($sales >= $n) {
            exit('秒杀结束');
        }
        //开启事务
        Cache::store('redis')->multi();
        Cache::store('redis')->incr('sales');  //将 key 中储存的数字值增一 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
        $res = Cache::store('redis')->exec(); //成功1 失败0
        if ($res) {
            $check = Db::name('goods_list')->where('id',1)->find();
            if($check['goods_number'] > 0){
                //秒杀成功
                Db::name('goods_list')->where('id',1)->setInc('sold_number');
                Db::name('goods_list')->where('id',1)->setDec('goods_number');
                $time = time();
                $sql = "INSERT INTO `goods_order` ( `sid`, `order_sn`, `username`, `goods_id`) VALUES (1, '20220123180655265788', '1381646', 1)";
                Db::name('goods_order')->execute($sql);
                Cache::store('redis')->expire('sales',60);
            }
        } else {
            exit('抢购失败');
        }

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:thinkphp5使用redis事务实现抢购 出自老鄢博客 | 欢迎分享