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

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 队列的实现方法相关推荐

  1. windchill创建定时队列执行

    1.指定包下创建队列方法类--CreateQueueForTest: 2.定义队列执行业务类--TestCreateQueue,编写具体业务方法: 3.启动windchill服务,在windchill ...

  2. python2 队列的使用_python双端队列原理、实现与使用方法分析

    本文实例讲述了python双端队列原理.实现与使用方法.分享给大家供大家参考,具体如下: 双端队列 双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构 ...

  3. 消息队列mq的原理及实现方法

    消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待 ...

  4. java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...

    简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用 Condition:可以理解成一把锁的一个钥匙,它既可以解锁(通知放行),又可以加锁(阻塞) n ...

  5. 队列实现栈的3种方法,全都击败了100%的用户!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 Github<小白学算法>系列:https://gith ...

  6. RTX5 | 消息队列01 - 创建消息队列

    文章目录 一.前言 二.实验的目的 三.API 3.1.osMessageQueueId_t 3.2.osMessageQueueAttr_t 3.3.osMessageQueueNew 四.代码 4 ...

  7. 队列的基础知识及实现方法

    队列 在网上又看到关于队列的知识点,有很多,但都比较琐碎,有的还有些错误,为方便自己理解,特整理出一篇,顺便也加强记忆:当然,也附上我参考的博客地址: http://www.cnblogs.com/k ...

  8. RabbitMQ消息队列创建

    操作环境 centos 7.9 RabbitMQ 3.8.23 Erlang 24.1.2 局域网(内网) 本文章是通过RabbitMQ图形管理界面,进行消息创建与队列绑定 首先在RabbitMQ安装 ...

  9. RabbitMQ创建死信队列

    向Queue_TTL队列里发送消息,10秒后当消息没有被正常消费掉则消息过期被转发至 Queue_DLX死信队列 const amqp = require('amqplib');async funct ...

  10. 数据结构之——队列与循环队列

    数据结构学习之--队列与循环队列 什么是队列(Queue) 队列基于动态数组的实现及时间复杂度分析 优化队列 循环队列(LoopQueue) 什么是队列(Queue) 队列(Queue)同栈(stac ...

最新文章

  1. 1人15篇入选?华人论文知多少?深度分析ICCV2019论文录取背后的那些事儿!
  2. “SQL Server does not allow remote connections”错误的解决
  3. 文件系统:使用 yum 安装软件包
  4. MySQL还是h5储存数据_h5中五大存储方式
  5. 步进电机只能一个方向转?
  6. Java中的委托模式
  7. 人员优化浪潮下,苟住要紧。
  8. python 函数重载_python中有函数重载吗
  9. 编译OpenJDK12:可以用VS2010到VS2017
  10. 家庭宽带光猫改桥接模式教程-淇云博客
  11. 简析Apache Ignite
  12. 使用腾讯云COS对象存储(详细流程)
  13. 我的奋斗,不需要任何理由
  14. 论文解读:医学影像中的注意力机制
  15. 贝尔曼最优方程(Bellman Optimality Equation)
  16. Debezium系列之:使用Debezium接入PostgreSQL数据库数据到Kafka集群的详细技术文档
  17. 利用python进行prosper贷款数据EDA分析(一)
  18. 模拟信号拉线位移编码器是如何来校准的?
  19. 我的计算机生涯--开始
  20. 剑网3选择人物后进入游戏就显示服务器断开连接,剑网3怎么进入游戏_剑网3进入游戏的问题_牛游戏网...

热门文章

  1. 【Love2D】第0章-从零开始学习Love2D
  2. 不小心将项目的 iml文件删除了怎么办
  3. 2022华为杯研究生数学建模解题思路和代码思路
  4. 解决visio中插入符号出现乱码
  5. 0606关于mysql优化原理
  6. TeamViewer正版许可证到底多少钱?
  7. 到底要不要去外包公司?这篇带你全面了解外包那些坑!
  8. 《领导力21法则》读书感悟
  9. 公开说说别人看不到_空间设置了权限说说所有人可见
  10. 03 tcl提取文件路径操作