关于定时任务的一些杂谈
关于定时任务的一些步骤。
前几天写了个队列来实现运营定时推送任务的功能,被leader喷了,原话是laravel的队列性能不好。于是请教了另一位前辈,据说,只需把laravel的队列实现底层逻辑由数组改为双向链表即可。我寻思着,那我特么还不如改定时!
- 创建定时文件
#生成定时任务的文件 php artisan make:command JPushJobs
注意:创建文件一般为make语句,用php artisan查看,创建定时任务:
make:command
创建队列:make:job
创建事件:make:event
创建控制类:make:controller
生成频道:make:channel
等等
生成的定时文件内容如下所示
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class JPushJobs extends Command
{
/**
* The name and signature of the console command.这里为定时任务的签名,根据这里的定义调用定时任务为:php artisan j-push:jobs
*
* @var string
*/
protected $signature = 'j-push:jobs';
/**
* The console command description.这里是在php artisan里的命令描述
*
* @var string
*/
protected $description = '后台定时推送的任务';
protected $pushInfoService;
/**
* Create a new command instance.
* JPushJobs constructor.
* @param PushInfoService $pushInfoService
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//此处增加相关处理逻辑
}
}
将定时任务加入
Kernel
管理
在Kernel.php文件中加入上一步定义好的定时任务,如下// 每分钟执行一次任务 $schedule->command('j-push:jobs')->everyMinute();
注意:
command
里放定时任务的签名,即定时任务中$signature
的定义。其中everyMinute()
表示此任务每分钟执行一次,如果是其他时间可以用其他方法,比如 每小时执行一次hourly()
、每天凌晨4点执行一次dailyAt('4:00')
、自定义比如每两小时执行一次cron('0 */2 * * *')
也可以直接将定时任务放入linux的定时任务管理
命令后crontab -e
进入定时任务管理脚本,然后加入管理语句
#将/your-project替换成你的项目目录
*/1 * * * * php /your-project/artisan j-push:jobs
注意:定时任务是一个挂载在后台的独立的进程,不需要像队列一样在方法中调用
本作品采用《CC 协议》,转载必须注明作者和本文链接
骚,
$schedule->command('j-push:jobs')->everyMinute();
和*/1 * * * * php /your-project/artisan j-push:jobs
真骚,laravel 队列的性能还可以吧,没听说过不好的
定时推送任务
,既然是定时任务,考量队列性能的标准是神马呢? 这个需求和队列貌似没啥关系,我理解的队列是异步和解决请求和处理的速度差异,这个需求用定时任务合理。延时任务队列配合redis的有序集合比较好,