关于的队列的介绍,我这里就不多讲了,随便百度一下都很多
用过laravel框架的童鞋都知道其自带队列功能,之前我很费解,PHP只是一个脚本,有超时机制,为什么能不停的去执行队列呢?
带着这个问题,在网上找了一下相关的介绍,这里我没有研究透laravel的队列,而且用这么高大上的实例来给大家讲,我估计自己都云里雾里
所以我就其原理说明一下
我们新建一个文件queue
<?php while(true){ echo 1; sleep(1); }
然后中 命令行里面 执行 php queue
你会发现每秒钟输出一个1;等了很久,咦,很神奇,为什么php没有超时呢?
对,就是不会超时【具体的百度吧】
ps -ef|grep php
会发现有一个 php queue进程
php超时的疑惑我们解决了
再来看一下队列的原理
新建一个文件 artisan
<?php $redis = new Redis(); $redis->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的列表里的值打出来
其实laravel的队列就是这个原理,只不过,它不仅支持redis作为载体,还可以使用其他更多的数据库
有人就要问了,我这php artisan启动了,如果我把窗口关了不就没用了吗,
不不不,Linux 还是可以在后台运行的
只要在命令后面加个 &
php artisan &
就可以啦
时间: 2024-10-12 16:55:02