tp5.1使⽤redis来处理队列的简单操作
准备⼯作
1. php安装redis扩展
2. redis各个版本的扩展包
3. 注意,请针对⾃⼰的php版本选择对应的redis扩展
4. 如果是windows请⾃⾏选择dll⽂件,将其放⼊php对应版本的ext⽂件夹下
5. 重启httpd(即apache),然后查看phpinfo是否有redis扩展,注意⼀般是选择86位的扩展
6. 到此,redis 安装成功
7. 若是在本地运⾏则,在下载⼀个redis本地安装包,地址:
8. windows可以选择zip格式的⽂件,也可以选择msi格式的⽂件
9. 安装的时候推荐⾃定义redis安装路径,因为需要安装完成之后的⽂件(以免不到)
10. 在安装的⽬录下f
11. 切记不是f
12. 在f最后加上你要登录的密码,具体代码如下
13. requirepass 12345
14. 这个就是redis的密码,还有最重要的⼀点:打开服务,然后查redis服务选择⾃动启动,
15. 最后可以下载⼀个redis可视化⼯具,来查看redis的存储是否成功。
16. 在tp5.1的框架中更改cache.php的配置⽂件,配置⽂件内容如下
17. 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)
1. 下载php_igbinary的扩展,
2. 下载完成之后根据php的版本来选择对应的扩展,放⼊ext⽂件夹下
3. 安装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());
php如何运行代码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为执⾏单个任务)
⾄此所有的操作就已经完成了,还有疑问的⼩伙伴可以在下⽅评论,说出你们的疑点
注意上⾯的流程有⼏部是省略的,省略的步骤如下
1. 如何配置全局composer
2. composer下载慢如何解决
3. igbinary的php扩展已经安装,但是执⾏队列任务时显⽰缺少igbinary扩展,这个的解决办法
4. redis可视化⼯具⽆法连接本地的redis
这些问题⼤家可以⾃⾏解决,若解决不了可在下⽅评论,我会把解决的办法在重新写⼀篇,另外在提⽰⼀下,tp5.1框架⽀不仅仅持定义string格式的数据哦,还⽀持定义list格式,和set格式,和hash格式的redis数据⽀持,这个不懂也可以在下⽅评论,我会专门写⼀⽚关于tp5.1框架中定义其他redis类型的数据,另外关于php在redis中常⽤的函数,在上⼀篇有总结,不了解的⼩伙伴可以去看看,不懂记得在下⽅评论。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。