首页 > 技术文章 > Php+Redis队列原理

wujf-myblog 2019-03-13 11:47 原文

我们新建一个文件queue.php

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

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

 

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

对,就是不会超时,Why?

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

 

接下来我们演示redis+php实现队列

新建一个文件 artisan.php

复制代码
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->auth('123456');//因为此处我设置了redis密码 while(1){ $res = $redis->lpop('listname'); if($res){echo $res."\r\n";} sleep(1); }
复制代码

然后php artisan.php 执行队列

 

 

我们来新建一个窗口,进入redis客户端输入以下命令【不会redis的可以在我的博客中找相关资料】

lpush listname a b c d e f g

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

 

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


 

有人就要问了,我这php artisa.php启动了,如果我把窗口关了不就没用了吗,

不不不,Linux 还是可以在后台运行的

只要在命令后面加个 &

php artisan &

就可以啦

推荐阅读