Rumah > pembangunan bahagian belakang > masalah PHP > php 队列的实现方法

php 队列的实现方法

藏色散人
Lepaskan: 2023-03-07 14:52:01
asal
2734 orang telah melayarinya

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);    
}
Salin selepas log masuk

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

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

对,就是不会超时,Why?

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

ps -ef | grep php
Salin selepas log masuk

会发现有一个 php queue进程

php超时的疑惑我们解决了

再来看一下队列的原理

新建一个文件 artisan.php

<?php
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;,6379);
while(1){
        $res = $redis->lpop(&#39;listname&#39;);
        if($res){echo $res."\r\n";}
        sleep(1);
}
Salin selepas log masuk

然后php artisan 执行队列

我们来新建一个窗口,进入redis客户端输入以下命令

lpush listname a b c d e f g
Salin selepas log masuk

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

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

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

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

nohup php artisan.php &
Salin selepas log masuk

Atas ialah kandungan terperinci php 队列的实现方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan