Hyperf定时任务(爬虫数据去重)

7 篇文章 1 订阅
5 篇文章 0 订阅

转载请注明: 藏羚骸的博客~Hyperf定时任务(爬虫数据去重).

Hyperf初体验 定时任务

项目开发难免会用到定时任务去执行一些简单的操作,学习hyperf也避免不了要去学习定时任务,写这篇文章也是参考官方文档给出的教程,希望能给一起学习的人提供帮助,如有不足欢迎指正。

hyperf/crontab 组件为您提供了一个 秒级 定时任务功能,只需通过简单的定义即可完成一个定时任务的定义。
使用hyperf定时任务,需要安装定时任务组件,通过composer安装,命令如下:

安装

composer require hyperf/crontab

使用

启用任务调度器进程
在 config/autoload/processes.php 内注册一下 Hyperf\Crontab\Process\CrontabDispatcherProcess 自定义进程,如下:

return [
    Hyperf\Crontab\Process\CrontabDispatcherProcess::class,
];

将 config/autoload/crontab.php 内的 enable 配置设置为 true,表示开启定时任务功能,如配置文件不存在可自行创建,配置如下:

<?php
return [
    // 是否开启定时任务
    'enable' => true,
];

通过配置文件定义定时任务

您可于 config/autoload/crontab.php 的配置文件内配置您所有的定时任务,文件返回一个 Hyperf\Crontab\Crontab[] 结构的数组

<?php
use Hyperf\Crontab\Crontab;

return [
    // 是否开启定时任务
    'enable' => true,
    // 通过配置文件定义的定时任务
    'crontab' => [
        // Callback类型定时任务(默认)
        (new Crontab())->setName('Distinct')->setRule('* * * * *')->setCallback([App\Task\DistinctTask::class, 'execute'])->setMemo('这是一个去重的定时任务'),
        
    ],
];

通过注解定义

在app/task目录新建FooTask文件,没有此目录手动创建

<?php
namespace App\Task;

use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Logger\LoggerFactory;
/**
 * @Crontab(name="Distinct", rule="* * * * *", callback="execute", memo="这是一个去重的定时任务")
 */
class DistinctTask
{

    /**
     * @Inject()
     * @var \Hyperf\Contract\StdoutLoggerInterface
     */
    private $logger;

    public function __construct( LoggerFactory $loggerFactory )
    {
        $this->logger = $loggerFactory->get('log','default');
    }

    public function execute()
    {
        $url="http://xxx.xxx.cn:9501/distinct";
        $this->geturlinfo($url);
    }
//get调用http接口
    public function geturlinfo($url){
    	 
		 $method ="GET";
		 $curl = curl_init();
		 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
		 curl_setopt($curl, CURLOPT_URL, $url);
		 curl_setopt($curl, CURLOPT_FAILONERROR, false);
		 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		 curl_setopt($curl, CURLOPT_HEADER, false);
	
		$ret = curl_exec($curl);
		$all=json_decode($ret,true);
    	return $all;
    }
//去重方法
    public function distinct(){
		$sql="DELETE from photos WHERE (title) in (SELECT title from (SELECT title FROM photos GROUP BY title HAVING COUNT(*)>1) s1) AND id NOT in (SELECT id from (SELECT id FROM photos GROUP BY title HAVING COUNT(*)>1) s2);";
		$mm=Db::delete($sql);
		return json_encode($mm);
	}
}

rule定时任务的执行规则,在分钟级的定义时,与 Linux 的 crontab 命令的规则一致,在秒级的定义时,规则长度从 5 位变成 6 位,在规则的前面增加了对应秒级的节点,也就是 5 位时以分钟级规则执行,6 位时以秒级规则执行,如 */5 * * * * * 则代表每 5 秒执行一次。注意在注解定义时,规则存在 \ 符号时,需要进行转义处理,即填写 *\/5 * * * * *crontab使用方法

config/routes.php加入

Router::get('/distinct', 'App\Task\DistinctTask::distinct');

运行定时任务

php bin/hyperf.php start

开始数据

运行控制台

日志文件runtime/logs/hyperf.log

去重最终数据

转载请注明: 藏羚骸的博客~Hyperf定时任务(爬虫数据去重)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值