欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php 队列的实现方法

程序员文章站 2022-03-08 09:27:45
...

php实现队列的方法:首先新建一个文件“artisan.php”;然后通过“php artisan”执行队列;最后进入redis客户端输入命令“lpush listname a b c d e f g”即可。

php 队列的实现方法

推荐:《PHP视频教程

PHP实现队列的原理(laravel)

用过laravel框架的童鞋都知道其自带队列功能,之前我很费解,PHP只是一个脚本,有超时机制。为什么能不停的去执行队列呢?

我们新建一个文件queue.php

<?php
while(true){
  echo 1;
  sleep(1);    
}

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

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

对,就是不会超时,Why?

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

ps -ef | grep php

会发现有一个 php queue进程

php超时的疑惑我们解决了

再来看一下队列的原理

新建一个文件 artisan.php

<?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客户端输入以下命令

lpush listname a b c d e f g

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

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

有人就要问了,我这php artisan.php启动了,如果我把窗口关了不就没用了吗?不不不,Linux 还是可以在后台运行的

只要在命令后面加个 &,或者nohup ... $ 放到后台运行即可,当然也可以加入crontab定时任务里去执行。

nohup php artisan.php &

以上就是php 队列的实现方法的详细内容,更多请关注其它相关文章!

相关标签: php