• 技术文章 >后端开发 >PHP问题

    php 队列的实现方法

    藏色散人藏色散人2020-11-10 09:58:43原创594

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

    推荐:《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中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:php怎么实现将对象转化为json字符串 下一篇:mac删除php的方法
    大前端线上培训班

    相关文章推荐

    • 谈谈PHP中的多进程消费队列• PHP redis队列如何实现历史搜索功能• Laravel 8 队列系统的新功能和变化• 什么是队列?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网