为了账号安全,请及时绑定邮箱和手机立即绑定

PHP消息队列实现及应用

Wicon PHP开发工程师
难度中级
时长 1小时14分
学习人数
综合评分9.73
60人评价 查看评价
9.8 内容实用
9.8 简洁易懂
9.6 逻辑清晰
  • 队列的优缺点

    查看全部
    0 采集 收起 来源:消息队列.mp4

    2019-11-13

  • 应用的场景
    查看全部
    0 采集 收起 来源:消息队列.mp4

    2019-11-13

  • 核心的结构


    查看全部
    0 采集 收起 来源:消息队列.mp4

    2019-11-13

  • 主要内容 消息队列

    查看全部
    0 采集 收起 来源:消息队列.mp4

    2019-11-13

  • 架构设计图


    查看全部
  • user.php 客户端
    
    <?php
    //连接本地的 Redis 服务
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    
    if ($redis) {
        echo "success";
    }
    $redis_name='miaosha';
    
    for ($i=0; $i<100; $i++) {
        $uid = rand(100000, 9999999);
    
    //接受用户id
       // $uid = $_GET['uid'];
    //获取一下redis里面已有的数量
        $num = 10;
    //如果当前人数少于时候的时候,则加入这个队列
        if ($redis->lLen($redis_name) < 10) {
            $redis->rPush($redis_name,$uid.'%'.microtime());
            echo $uid . '秒杀成功!'.'<br>';
        } else {
            //如果当天人数已经达到了十个人,则返回秒杀已完成
            echo "秒杀已结束";
        }
    
    }
    $redis->close();
    
    ?>
    查看全部
  • 服务端
    <?php
    include './db.php';
    //连接本地的 Redis 服务
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis_name="miaosha";
    $db=DB::getIntance();
    
    //死循环,
    while (1){
    //第一步
    //从队列最左侧取出一个值来,
    $user = $redis->lPop($redis_name);
    //然后判断这个值是否存在,
    if(!$user||$user=='nil'){
        sleep(2);
        continue;
    }
    //如果存在切割出时间,uid
        $user_arr = explode('%', $user);
    
        $insert_data = array(
            'uid' => $user_arr[0],
            'time_stamp' => $user_arr[1]);
    
    
        $res = $db->insert('redis_queue',$insert_data);
    //保存数据库中,
      if(!$res){
          $redis->rPush($redis_name,$user);
      }
      sleep(2);
    //第二部
    //redis如果把值取出来这个值就不在队列里了
    //如果出现问题了我的业务没有完成失败的情况下,我们需要有一个备份机制把值重新插回队列里
    //数据库插入失败时候的回滚机制
    //释放一下redis
    
    }
    $redis->close();
    ?>


    查看全部
  • 棒   继续加油


    查看全部
  • CREATE TABLE order_queue (

    id INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id号',

    order_id int(11) NOT NULL,

    mobile varchar(20) NOT NULL COMMENT '用户的手机号',

      `created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '订单创建的时间',

    `updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '处理完成的时间',

    `status` tinyint(2) NOT NULL COMMENT '当前状态,0未处理,1已处理,2处理中',

    PRIMARY key (`id`)

    )ENGINE=InnoDB DEFAULT CHARSET=utf8;


    查看全部
  • LTRIM:保留置顶区间内的元素

    LLEN:获取列表长度

    LSET:通过索引设置列表元素值

    LINDEX:通过索引获取列表中的元素

    LRANGE:获取列表置顶范围内的元素

    查看全部
    0 采集 收起 来源:Redis

    2019-06-01

  • LPUSH/LPUSHX:将值插入到(/存在的)列表头部->带X为存在的

    RPUSH/RPUSHX:将值插入到(/存在的)列表尾部->带X为存在的

    LPOP:移出并获取列表的第一个元素

    RPOP:移出并获取列表的最后一个元素

    查看全部
    0 采集 收起 来源:Redis

    2019-06-01

  • 查看文件安装路径方法:

    1、dpkg -L softwarename; 

    2、sudo apt-get install apt-file,

    然后使用命令:apt-file list softwarename, 


    查看全部
    0 采集 收起 来源:总结.mp4

    2019-05-17

  • Redis List类型

    查看全部
    0 采集 收起 来源:Redis

    2019-05-17

  • 消息队列的应用场景

    冗余:记录订单处理程序  

    解耦:分离两套系统,入队出队系统各不影响

    流量削峰:抢购秒杀

    异步通信:入队

    扩展性:订单队列可扩展,新接口处理。

    排序保证:顺序排位

    队列介质:Mysql,Redis(单个包太大,效率低),消息系统


    查看全部
    0 采集 收起 来源:Redis

    2019-05-17

  • 左侧插入 lpush


    查看全部
    0 采集 收起 来源:Redis

    2019-04-04

举报

0/150
提交
取消
课程须知
1.掌握PHP基础知识 2.使用过Redis技术做缓存 3.有简单的Linux命令基础,如cd、sudo、apt、Vim
老师告诉你能学到什么?
1.队列是个什么东西,他能干什么 2.队列的应用场景有哪些 3.如何使用队列对业务进行解耦 4.如何使用Redis队列来消除高压力 5.专业的队列系统RabbitMQ如何来使用 课程所需库文件:http://pan.baidu.com/s/1bQg038

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!