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

PHP消息队列实现及应用

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

    查看全部
  • 创建数据库表:

    https://img1.sycdn.imooc.com//5b3cd2ae0001fe0f05110144.jpg

    一、接收用户请求存入到redis的程序

    二、将redis的数据插入到数据库的程序



    查看全部

  • 秒杀:在同一时间会有巨大的访问量。

    Redis基于内存,速度较快,Mysql数据库则需要在硬盘中写入数据,速度慢。

    另外,数据库如果阻塞其他的业务也将受到影响。


    Redis是数据可持久化的,会周期性的将数据写入硬盘。不用担心断电。


    Redis提供五种数据类型:字符串、双向链表、哈希表、集合、有序集合。

    list类型是一个双向链表,支持头部和尾部插入元素。最多可支持40亿个元素。

    处理简单轻量的消息队列时非常有优势。

    https://img1.sycdn.imooc.com//5b3cd18a00017b5f05990357.jpg


    https://img1.sycdn.imooc.com//5b3cd1a40001875b05950333.jpg

    https://img1.sycdn.imooc.com//5b3cd1b7000143f306270333.jpg

    https://img1.sycdn.imooc.com//5b3cd1d00001805905690248.jpg

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

    2018-07-04

  • yum install php-bcmath php-mbstring php-0dom php-curl

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

    2018-07-01

  • <?php
    inlcude_onceA './include/db.php';
    $redis = new Redis();
    $resid->connect('127.0.0.1', 6379);
    $reds_name = 'miaosha';
    $db = DB::getInstance();
    //死循环
    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' => $use_arr[1]]
    );
     
     //保存到数据库中
     $res = $db->insert('redis_queue', $insert_data);:
     //数据库插入失败时回滚
      if (!$res) {
          $redis->rPop($redis_name, $user);
      }
     }
     //释放redis
     $redis->close();
     
     
    }


    查看全部
  • </php
    //首先,加载一个Reids组件,
    $redis = new Redis();
    $resid->connect('127.0.0.1', 6379);
    $reds_name = 'miaosha';
    for ($i = 0;$i < 100;$i++) {
        $uid = rand(1000000, 9999999);
    }
    
    //接收用户的id,
    //$uid = $_GET['uid'];
    //获取redis里面已有的数量
    $num = 10;
    //如果当前人数少于10的时候,则加入这个队列
    if ($redis->lLen($resid_name) < 10) {
        $redis->rPush($redis_name . $uid . '%' . microtime());
        echo $uid . '秒杀成功';        
    }else{
        //如果当前人数已经达到10人,责任返回秒杀已完成
            echo '秒杀已结束';
    }
    $redis->close();


    查看全部
  • 整体流程:接受用户订单,通过crontab进行配送处理

    弊端:如果用户量大,会导致配送时间紊乱(个人观点)

    查看全部
    0 采集 收起 来源:.Mysql订单队列

    2018-06-30

  • 消息队列的应用场景

    冗余

    解耦

    流量削峰

    异步通信

    扩展性

    排序保证

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

    2018-06-30

  • RabbitMQ的官网是www.rabbitmq.com

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

    2018-06-27

  • 代码级设计

    秒杀程序把请求写入Redis.(Uid, time_stamp)

    检查Redis已存放数据的长度,超出上限直接丢弃

    死循环处理存入Redis的数据并入库 

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

    2018-06-25

  • 程序流程图

    查看全部
    0 采集 收起 来源:.Mysql订单队列

    2018-06-25

  • 队列介质:

    Mysql:可靠性高、易实现,速度慢

    Redis:速度快,单条大消息包时效率低

    消息系统:专业性强、可靠,学习成本高

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

    2018-06-25

  • 消息处理触发机制:

    死循环读取:易实现,故障时无法及时恢复

    定时任务:压力均分,有处理量上限

    守护进程:类似php-fpm php-cg,需要shell基础

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

    2018-06-25

  • MQ应用场景:

    冗余、解耦、流量削峰、异步通信、扩展性、排序保证

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

    2018-06-25

  • 消息队列核心结构:

    业务系统-入队->消息队列-出队->队列处理系统

    应用场景:

    数据冗余

    解耦:(入队系统,出队系统相互独立,互不干涉。)

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

    2018-06-13

举报

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下载
官方微信
友情提示:

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