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

    参考:http://www.cnblogs.com/lisqiong/p/6039460.html

    参考:http://blog.csdn.net/shaobingj126/article/details/50585035

    消息队列:是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它

    应用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景

    1、异步处理

    场景说明:用户注册后,需要发注册邮件和注册短信。

     

    注解:自行考虑ajax中的异步。

    2、应用解耦

    一般订单系统和库存系统是一体的,但是如果一方出现问题,那么这个订单就失败了。

     

    • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
    • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
    • 假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

    注解:感觉特别像行为驱动,消息队列中存储的就是每个行为

    3、流量消锋(一般在秒杀或团抢活动中使用广泛)

    注解:一般秒杀时订单会特别的多,但是数据库无法一次性的处理这么多,所以可以先存在消息队列中,无论我进的速度多快,出的速度都是一定的。不知道算不算属于漏斗模型的一部分

    php的redis扩展:https://github.com/phpredis/phpredis

    1)redis函数rpush,lpop

    2).Linux的crontab

    创建demo.php和index.php

    <?php
    
    $redis = new Redis();
     
    $redis->connect('127.0.0.1',6379);
     
    $password = '123456';
     
    $redis->auth($password);
     
    $arr = array('h','e','l','l','o','w','o','r','l','d');
     
    foreach($arr as $k=>$v){
     
      $redis->rpush("mylist",$v);
     
    }
    <?php
     
    $redis = new Redis();
     
    $redis->connect('127.0.0.1',6379);
     
    $password = '123456';
     
    $redis->auth($password);
     
    //list类型出队操作
     
    $value = $redis->lpop('mylist');
     
    if($value){
     
     echo "出队的值".$value;
     
    }else{
     
      echo "出队完成";
     
    }
     
    ?>

    建立定时任务

     */1 * * * * root php /wwwroot/workplace/redis/index.php

     */3 * * * * root php /wwwroot/workplace/redis/demo.php

  • 相关阅读:
    网站的内容安全策略(CSP)
    javascript学习日记--eval、prompt
    【java每日一学】Applet类详解
    JavaScript 闭包应用-打印所有li元素的内容
    JavaScript 闭包应用-计算打车价格
    JavaScript 闭包应用-点击li输出索引号
    JavaScript jQuery 任务清单 ToDoList
    JavaScript 面向对象TAB栏切换
    JavaScript 常见移动端网页特效
    JavaScript 移动端轮播图
  • 原文地址:https://www.cnblogs.com/dongtong/p/6525010.html
Copyright © 2011-2022 走看看