博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP实现队列的原理
阅读量:5996 次
发布时间:2019-06-20

本文共 1170 字,大约阅读时间需要 3 分钟。

  hot3.png

关于的队列的介绍,我这里就不多讲了,随便百度一下都很多

用过laravel框架的童鞋都知道其自带队列功能,之前我很费解,PHP只是一个脚本,有超时机制

为什么能不停的去执行队列呢?

带着这个问题,在网上找了一下相关的介绍,这里我没有研究透laravel的队列,而且用这么高大上的实例来给大家讲,我估计自己都云里雾里

所以我就其原理说明一下

 

我们新建一个文件queue

然后中 命令行里面 执行 php queue

你会发现每秒钟输出一个1;等了很久,咦,很神奇,为什么php没有超时呢?

对,就是不会超时,Why?

答:实际上PHP执行脚本是不会超时的,我们在网页中看到的诸如504等超时,是由Apache,Nginx,PHP配置文件设置的超时时间决定的,因为PHP命令行执行文件没有使用PHP配置文件,所以默认是不超时的。

 

ps -ef|grep php

会发现有一个 php queue进程

---------------------------------------------------------------------------------------------------------

php超时的疑惑我们解决了

再来看一下队列的原理

新建一个文件 artisan

connect('127.0.0.1',6379);while(1){ $res = $redis->lpop('listname'); if($res){echo $res."\r\n";} sleep(1);}

然后php artisan 执行队列

 

我们来新建一个窗口,进入redis客户端输入以下命令【不会redis的可以在我的博客中找相关资料】

lpush listname a b c d e f g

会发现php artisan这个队列会不断的把redis里我刚刚push进去的值打出来

其实laravel的队列就是这个原理,只不过,它不仅支持redis作为载体,还可以使用其他更多的数据库

--------------------------------------------------------------------------------------------------------

有人就要问了,我这php artisan启动了,如果我把窗口关了不就没用了吗,

不不不,Linux 还是可以在后台运行的

只要在命令后面加个 &

php artisan &

就可以啦

这些是PHP队列的基本原理,当然我们还可以去执行对象的队列及更复杂的情况,更多的请研究Laravel吧

转载于:https://my.oschina.net/hjchhx/blog/1511209

你可能感兴趣的文章
集合的介绍(正在更新中)
查看>>
史上最全的呼叫中心词汇全解——AOFAX呼叫中心
查看>>
MyBatis封装简单的CRUD
查看>>
pep8编码规范
查看>>
CoreOS实践指南(四):集群的指挥所Fleet
查看>>
centos 常见小问题记录
查看>>
判断日期的后者不能大于前者
查看>>
Java NIO 利用通道完成文件复制(MappedByteBuffer)
查看>>
spark通过combineByKey算子实现条件性聚合的方法
查看>>
超酷信息图分享:你属于哪类geek?
查看>>
帮助你快速简单执行定时循环操作的JavaScript类库 - Later.js
查看>>
JavaScript继承的思想实现
查看>>
决心书
查看>>
测试用例设计方法
查看>>
Linux学习笔记5月15日任务
查看>>
zabbix监控iptables时遇到的问题
查看>>
蜂鸟微课堂 视频缓存 下载 保存
查看>>
命令详细 第二周 (混乱版) 初学者自用
查看>>
js实现打字效果
查看>>
来鑫干货解读:迅雷链到底有什么了不起?
查看>>