• 消息队列redis


    1.消息队列流程

    2.接收用户请求

    <?php
    header("Content-type:text/html;charset=utf-8");
    //首先加载redis组键
    $redis = new Redis();
    $redis->connect('127.0.0.1',6379);
    //接收用户的id
    $redis_name = $_GET['uid'];
    //获取一下redis里面已有的数量
    //
    $num = 10;
    //如果当天人数少于10人的时候,则加入这个队列
    if($redis->Len($redis_name) < 10){
      //如果当天的人数已经达到了10人,则返回秒杀已完成
      $redis->rPush($redis_name,$uid.'%'.microtime());
        echo $uid.'秒杀成功';
    }else{
        echo '秒杀失败';
    }
    $redis->close();

    3.执行定时任务插入数据库

    <?php
    header("Content-type:text/html;charset=utf-8");
    //首先加载redis组键
    $redis = new Redis();

    $redis->connect('127.0.0.1',6379);
    $redis_name = 'miaosha';
    $db=DB::getIntance();
    //死循环
    while($i<=50){
        $i +=1;
        //从队列最左侧取出一个值来,
        $user = $Redis->lPop($redis_name);
        //然后判断这个值是否存在
        if(!$user || $user == 'nil'){
            sleep(2);
            continue;
        }
        sleep(1); //空队休息时间
    }
    //切割指出时间,uid
    $user_arr = explode('%',$user);
    //保存数据库中
    $res = $db->insert('redis_queue',$insert_data);

    //数据库回滚机制释放redis(插入失败时候回滚机制)

    if(!$res){
        $redis->rPush($redis_name,$user);
    }

    sleep(2);

    //释放一下redis

    $redis->close();


  • 相关阅读:
    JQuery
    Ubuntu18.04
    Ubuntu18.04
    Ubuntu18.04
    Ubuntu18.04
    Cordova
    Android
    Android
    Delphi
    postgresql之 drop & delete & truncate
  • 原文地址:https://www.cnblogs.com/yangzailu/p/9428846.html
Copyright © 2020-2023  润新知