tp5.1使用redis来处理队列的简单操作
- php安装redis扩展
- redis各个版本的扩展包点此下载
- 注意,请针对自己的php版本选择对应的redis扩展
- 如果是windows请自行选择dll文件,将其放入php对应版本的ext文件夹下
- 重启httpd(即apache),然后查看phpinfo是否有redis扩展,注意一般是选择86位的扩展
- 到此,redis 安装成功
- 若是在本地运行则,在下载一个redis本地安装包,地址:https://github.com/MicrosoftArchive/redis/releases
- windows可以选择zip格式的文件,也可以选择msi格式的文件
- 安装的时候推荐自定义redis安装路径,因为需要安装完成之后的文件(以免找不到)
- 在安装的目录下找redis.windows-service.conf
- 切记不是redis.windows.conf
- 在redis.windows-service.conf最后加上你要登录的密码,具体代码如下
- requirepass 12345
- 这个就是redis的密码,还有最重要的一点:打开服务,然后查找redis服务选择自动启动,
- 最后可以下载一个redis可视化工具,来查看redis的存储是否成功。
- 在tp5.1的框架中更改cache.php的配置文件,配置文件内容如下
return [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', //密码 'password' =>'12345', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'yx_', ];
写入缓存
cache('times',time());
在redis可视化工具中查看是否存在string格式数据 times
如上图所示,至此代表redis安装成功,并测试通过。
下一步安装 队列所需要的php的另一个扩展(php_igbinary)
- 下载php_igbinary的扩展,点此下载
- 下载完成之后根据php的版本来选择对应的扩展,放入ext文件夹下
- 安装tp5.1框架的队列扩展(composer安装)
composer require topthink/think-queue
*注意framework的版本必须是5.1.才可以安装否则安装失败。
配置队列的方式,采用redis队列,在config文件夹下更给queue.php;更改内容如下
return [
//'connector' => 'Redis',
'connector' => 'Redis', // 数据库驱动
// 服务器地址
'host' => '127.0.0.1',
//密码
'password' =>'12345',
'expire' => 60, // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
'default' => 'default', // 默认的队列名称
];
按照上述的代码更改queue.php文件的代码,注意:若在安装redis时更改了redis的密码,那请把redis的密码改为自己设置的密码;host也可以改为服务器的地址,但是切记必须和密码是一对的
在application文件夹下创建job文件夹,在job文件夹下创建job1.php;并加入如下的代码内容。
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 2019/4/15
* Time: 16:38
*/
namespace app\job;
use think\Controller;
use think\queue\Job;
class Job1 extends Controller
{
public function fire(Job $job, $data){
//....这里执行具体的任务
cache('starttime',time());
if ($job->attempts() == 2) {
//通过这个方法可以检查这个任务已经重试了几次了
//如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
cache('endtime',time());
$job->delete();
}
// 也可以重新发布这个任务
//$job->release($delay); //$delay为延迟时间
}
/**
* 任务达到最次数失败
* @param $data
*/
public function failed($data){
// ...任务达到最大重试次数后,失败了
cache('failtime',time());
}
}
上面的类可以不继承controller类。注意监听任务的时候,需要先发布任务,才可以监听,否则的话,无法监听任务
发布队列任务(代码如下)
Queue::push('Job1', $data = 'tesadada000', $queue = null);
其中job1是任务类名,$data是任务需要传入的参数,第三个参数是指定队列
在监听任务前,先访问发布队列任务的接口,来把任务加入队列当中,然后再执行任务,具体的代码如下
这个是在命令管理里面输入的;命令如下
php think queue:listen
php think queue:work --daemon(不加--daemon为执行单个任务)
至此所有的操作就已经完成了,还有疑问的小伙伴可以在下方评论,说出你们的疑点
注意上面的流程有几部是省略的,省略的步骤如下
- 如何配置全局composer
- composer下载慢如何解决
- igbinary的php扩展已经安装,但是执行队列任务时显示缺少igbinary扩展,这个的解决办法
- redis可视化工具无法连接本地的redis
这些问题大家可以自行解决,若解决不了可在下方评论,我会把解决的办法在重新写一篇,另外在提示一下,tp5.1框架支不仅仅持定义string格式的数据哦,还支持定义list格式,和set格式,和hash格式的redis数据支持,这个不懂也可以在下方评论,我会专门写一片关于tp5.1框架中定义其他redis类型的数据,另外关于php在redis中常用的函数,在上一篇有总结,不了解的小伙伴可以去看看,不懂记得在下方评论。