tp5.1使用redis来处理队列的简单操作

准备工作

    • 写入缓存
    • 下一步安装 队列所需要的php的另一个扩展(php_igbinary)
    • 发布队列任务(代码如下)

  1. php安装redis扩展
  2. redis各个版本的扩展包点此下载
  3. 注意,请针对自己的php版本选择对应的redis扩展
  4. 如果是windows请自行选择dll文件,将其放入php对应版本的ext文件夹下
  5. 重启httpd(即apache),然后查看phpinfo是否有redis扩展,注意一般是选择86位的扩展
  6. 到此,redis 安装成功
  7. 若是在本地运行则,在下载一个redis本地安装包,地址:https://github.com/MicrosoftArchive/redis/releases
  8. windows可以选择zip格式的文件,也可以选择msi格式的文件
  9. 安装的时候推荐自定义redis安装路径,因为需要安装完成之后的文件(以免找不到)
  10. 在安装的目录下找redis.windows-service.conf
  11. 切记不是redis.windows.conf
  12. 在redis.windows-service.conf最后加上你要登录的密码,具体代码如下
  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
tp5.1使用redis来处理队列的简单操作_第1张图片
如上图所示,至此代表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;并加入如下的代码内容。

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中常用的函数,在上一篇有总结,不了解的小伙伴可以去看看,不懂记得在下方评论。

你可能感兴趣的:(技术)