zoukankan      html  css  js  c++  java
  • redis消息队列

    // 初始化redis数据列表 模拟库存50,redis搭建在centos中已开启
    public function redisinit(){
        $store=50; // 库存50
        $redis=$this->redis(); //接入redis
        $redis->del('goods_store'); // 删除库存列表
        $res=$redis->llen('goods_store'); //返回库存长度,这里已经是0
        $count=$store-$res;
        for($i=0;$i<$count;$i++){
            $redis->lpush('goods_store',1); //列表推进50个,模拟50个商品库存
        }
    }
    
    // 秒杀入口
    public function kills(){
        $id = input("id"); //商品编号
        if(!$id)
            return $this->insertlog(0);//记录失败日志
        $redis = $this->redis(); // 接入redis
        $count=$redis->lpop('goods_store'); //减少库存,返回剩余库存数
        if(!$count){ //库存为0
           $this->insertlog(0); //记录秒杀失败的 日志
            return false;
        }else{// 有库存
            $ordersn = $this->build_order_no(); //订单号随机生成
            $uid = rand(0,9999); //用户id随机生成,正式项目可以启用登录的session
            $status = 1; // 订单状态
            $data = Db::name("ab_goods")->field("count,amount")->where("id",$id)->find();//查找商品
            if(!$data)
               return $this->insertlog(0); //商品不存在
            $result = Db::name("ab_order")->insert(["order_sn"=>$ordersn,"user_id"=>$uid,"goods_id"=>$id,"price"=>$data['amount'],"status"=>$status,'addtime'=>date('Y-m-d H:i:s')]); //订单入库
            $res = Db::name("ab_goods")->where("id",$id)->setDec("count"); //库存减少
            if($res){
                $this->insertlog(); //记录成功的日志
            }else{
                $this->insertlog(0);//记录失败的日志
            }
        }
    }        
     
    //生成唯一订单
    function build_order_no(){
        return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
    }
     
    // 记录日志 状态1成功 0失败
    function insertlog($status=1){
        return Db::name("ab_log")->insertGetId(["count"=>1,"status"=>$status,"addtime"=>date('Y-m-d H:i:s')]);
    }
  • 相关阅读:
    关于vue无法侦听数组及对象属性的变化的解决方案
    web js导出csv 文件(使用a标签)
    微信小程序-获取用户信息和openid,session_key,
    H5适配 iponex
    项目使用iconfont图标
    锚点链接,组件库中锚点实现
    前端的调试工具和node调试工具
    前端模块化 CommonJS AMD CMD ES6
    支付宝小程序
    个人创用 UA 列表
  • 原文地址:https://www.cnblogs.com/seanpan/p/13993957.html
Copyright © 2011-2022 走看看