设为首页 收藏本站
查看: 1325|回复: 0

[经验分享] php+redis实现消息队列

[复制链接]

尚未签到

发表于 2017-12-21 17:09:11 | 显示全部楼层 |阅读模式
  参考:http://www.cnblogs.com/lisqiong/p/6039460.html
  参考:http://blog.csdn.net/shaobingj126/article/details/50585035
  消息队列:是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它
  应用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景
  1、异步处理
  场景说明:用户注册后,需要发注册邮件和注册短信。
DSC0000.png

  注解:自行考虑ajax中的异步。
  2、应用解耦
  一般订单系统和库存系统是一体的,但是如果一方出现问题,那么这个订单就失败了。
DSC0001.png



  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
  • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
  • 假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。
  注解:感觉特别像行为驱动,消息队列中存储的就是每个行为
  3、流量消锋(一般在秒杀或团抢活动中使用广泛)
DSC0002.png

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426552-1-1.html 上篇帖子: redis成长之路 下篇帖子: Spring+Redis(keyspace notification)实现定时任务(订单过期自动关闭)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表