这篇文章主要给大家介绍了关于redis中队列消息实现应用解耦的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

消息队列的

我们都知道,消息是在两台计算机之间传送的数据单位,这个“消息”可以非常简单,例如只包含文本字符串,也可以更复杂,可能包含嵌入对象。而所谓的“消息队列”是在消息的传输过程中保存消息的容器。在web程序中,可能我们需要将用户的请求数据更新或者添加到数据库中,但是在高炳发的情况下,虽然作为用户的我们不知道后台是什么原因,但是依旧会抱怨或者吐槽这个程序反应,比如在过去的几年里,你有没有吐槽过12306抢票很难?反应很慢?有没有在使用某个程序的时候收到“service is too busy”,而这其实是因为当时的并发访问过量,超过了系统的最大负载能力。当然我们可以通过添加服务器集群中服务器的数量来增加程序的负载能力。

过度耦合的缺点:php应用中,过度的耦合使得系统拓展性变弱,联动性错误。

今天我给大家介绍的是利用redis的队列消息实现模块间的解耦。

应用:用户在采购模块下单买了一批货物回来,签收时要在仓库模块添加相应的库存,普通的做法就是在签收完成的时候通过接口给仓库模块数据执行入库操作。但是这么做如果仓库模块发送错误,没有入库成功就会导致采购模块签收失败,这就是耦合给系统带来的缺点。

解决方案:运用php+redis队列消息的技术,当用户签收成功的时候,把数据放入队列中,入列成功采购模块则返回签收成功的提示给用户,后续的操作都不需要采购模块操心,然后仓库系统可以通过redis的订阅发布模式来进行监听,当有数据入列,则仓库系统就执行入库逻辑代码的

运行。

关键点:

1、如果redis服务器挂掉了怎么办啊?

在采购模块的签收逻辑代码中做判断,如果入列成功则返回签收完成,如果入列失败这运行传统方法,通过接口入库的方法。如果redis也挂了,仓库模块也挂了怎么办啊,那你就收拾包袱回家吧。

2、如何实现传统方式那样实时入库啊?

采用redis的订阅发布模式就可以解决。订阅的代码放在仓库模块,发布的代码放在采购模块。

订阅代码sub.php

<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['ruku'], function ($redis, $chan, $msg) {//订阅入库频道   if($msg==2500){   //如果监听到有发布信息则从队列中拿取信息进行入库操作    。。。。。。。  }  
});

发布代码pub.php

<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$order = ['id' => 1, 'name' => '小米6', 'price' => 2499, 'created_at' => '2017-07-14'];$redis->lpush('order',$order);
$redis->publish("ruku", 2500);

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对爱安网的支持。

最新资讯
称手游《奇迹封神》抄袭 上海天銮诉百度等索赔300万

称手游《奇迹封神》抄

上海天銮网络技术有限公司称,认为对方手机游戏《奇迹封
中国联通A股第一季度营收731.47亿元 同比下降2.39%

中国联通A股第一季度

中国联通A股(600050.SH)发布了第一季度财报。财报显示,中
中国航天日|这些航天趣闻你知道吗?

中国航天日|这些航天

当然不会,因为航天员是睡在专用睡袋里的,只要将睡袋固定
进入“一元”股时代 乐视网连续三个交易日跌停

进入“一元”股时代

乐视网盘中连续第三个交易日跌停,截至发稿,收于1.83元/
郭台铭参选2020 台金管会要求做好接班人咨询揭露

郭台铭参选2020 台金

顾立雄今早受访并指出,现在对于任何集团在创业第一代有
被指自燃的特斯拉已送往体验中心检查 现场戒备严密

被指自燃的特斯拉已送

“特斯拉疑似自燃”一事有了新进展。
最新文章
Redis Cluster的图文讲解

Redis Cluster的图文

今天小编就为大家分享一篇关于Redis Cluster的图文讲
gem install redis报错的解决方案

gem install redis报

今天小编就为大家分享一篇关于gem install redis报错
使用Ruby脚本部署Redis Cluster集群步骤讲解

使用Ruby脚本部署Redi

今天小编就为大家分享一篇关于使用Ruby脚本部署Redis
如何使用Redis保存用户会话Session详解

如何使用Redis保存用

这篇文章主要给大家介绍了关于如何使用Redis保存用户
详解Redis中Lua脚本的应用和实践

详解Redis中Lua脚本的

这篇文章主要介绍了详解Redis中Lua脚本的应用和实践,小
Redis的5种数据类型与常用命令讲解

Redis的5种数据类型与

今天小编就为大家分享一篇关于Redis的5种数据类型与常