杨仁安 發表於 2019-6-17 14:09:00

php+redis实现消息队列

<p>参考:http://www.cnblogs.com/lisqiong/p/6039460.html</p>
<p>参考:http://blog.csdn.net/shaobingj126/article/details/50585035</p>
<p>消息队列:是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它</p>
<p>应用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景</p>
<p>1、异步处理</p>
<p>场景说明:用户注册后,需要发注册邮件和注册短信。</p>
<p>&nbsp;<img src="http://finalshares.cn/attachment/threadsImgs/images2015.cnblogs.com/blog/820332/201601/820332-20160124211131625-1083908699.png"></p>
<p>注解:自行考虑ajax中的异步。</p>
<p>2、应用解耦</p>
<p>一般订单系统和库存系统是一体的,但是如果一方出现问题,那么这个订单就失败了。</p>
<p>&nbsp;<img src="http://finalshares.cn/attachment/threadsImgs/images2015.cnblogs.com/blog/820332/201601/820332-20160124211307687-1914946501.png"></p>
<ul>
<li>订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。</li>
<li>库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。</li>
<li>假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。</li>
</ul>
<p>注解:感觉特别像行为驱动,消息队列中存储的就是每个行为</p>
<p>3、流量消锋(一般在秒杀或团抢活动中使用广泛)</p>
<p><img src="http://finalshares.cn/attachment/threadsImgs/images2015.cnblogs.com/blog/820332/201601/820332-20160124211333125-923847962.png"></p>
<p>注解:一般秒杀时订单会特别的多,但是数据库无法一次性的处理这么多,所以可以先存在消息队列中,无论我进的速度多快,出的速度都是一定的。不知道算不算属于漏斗模型的一部分</p>
<p>php的redis扩展:https://github.com/phpredis/phpredis</p>
<p>1)redis函数rpush,lpop</p>
<p>2).Linux的crontab</p>
<p>创建demo.php和index.php</p>
<div class="cnblogs_code">
<pre>&lt;?php

$redis = new Redis();

$redis-&gt;connect('127.0.0.1',6379);

$password = '123456';

$redis-&gt;auth($password);

$arr = array('h','e','l','l','o','w','o','r','l','d');

foreach($arr as $k=&gt;$v){

$redis-&gt;rpush("mylist",$v);

}</pre>
</div>
<div class="cnblogs_code">
<pre>&lt;?php

$redis = new Redis();

$redis-&gt;connect('127.0.0.1',6379);

$password = '123456';

$redis-&gt;auth($password);

//list类型出队操作

$value = $redis-&gt;lpop('mylist');

if($value){

echo "出队的值".$value;

}else{

echo "出队完成";

}

?&gt;</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/bluealine/p/11039340.html
頁: [1]
查看完整版本: php+redis实现消息队列