php 任务调度系统,laravel任务调度的介绍(附代码)

本文介绍了如何在 Laravel 中实现定时任务,用于统计每日的独立访问IP。首先,通过事件监听器记录用户的IP地址并存储到Redis Set中。接着,创建一个名为`CountIpDay`的命令来统计昨日的访问IP总数,并通过邮件发送统计结果。最后,配置任务调度在每天凌晨1点执行该统计任务。在Linux中设置定时任务以确保定时执行。
摘要由CSDN通过智能技术生成

本篇文章给大家带来的内容是关于laravel任务调度的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

导语:之前写过使用 Linux 的进行定时任务,实际上 laravel 也可以执行定时任务。需求是统计每日访问的 IP 数,虽然数据表中有数据,为了演示,新建监听器统计。

记录 IP

这篇文章中介绍了实现了事件/监听器,在此基础上进行扩展。

注册一个新的监听器,在 app/Providers/EventServiceProvider.php 文件中新添加 CreateUserIpLog/**

* The event listener mappings for the application.

*

* @var array

*/

protected $listen = [

Registered::class => [

SendEmailVerificationNotification::class,

],

'App\Events\UserBrowse' => [

'App\Listeners\CreateBrowseLog',// 用户访问记录

'App\Listeners\CreateUserIpLog',// 用户 IP 记录

],

];

添加完成后执行 php artisan event:generate,创建好了 app/Listeners/CreateUserIpLog.php 文件;在新建监听器中,记录用户的 IP,使用 Redis 的 Set 数据类型进行记录,代码如下/**

* Handle the event.

* 记录用户 IP

* @param UserBrowse $event

* @return void

*/

public function handle(UserBrowse $event)

{

$redis = Redis::connection('cache');

$redisKey = 'user_ip:' . Carbon::today()->format('Y-m-d');

$isExists = $redis->exists($redisKey);

$redis->sadd($redisKey, $event->ip_addr);

if (!$isExists) {

// key 不存在,说明是当天第一次存储,设置过期时间三天

$redis->expire($redisKey, 259200);

}

}

统计访问

上面将用户的 IP 记录下来,然后就是编写统计代码新建一个任务 php artisan make:command CountIpDay,新建了 app/Console/Commands/CountIpDay.php 文件;

设置签名 protected $signature = 'countIp:day'; 和描述 protected $description = '统计每日访问 IP';

在 handle 方法中编写代码,也可以在 kernel.php 中使用 emailOutputTo 方法发送邮件/**

* Execute the console command.

*

* @return mixed

*/

public function handle()

{

$redis = Redis::connection('cache');

$yesterday = Carbon::yesterday()->format('Y-m-d');

$redisKey = 'user_ip:' . $yesterday;

$data = $yesterday . ' 访问 IP 总数为 ' . $redis->scard($redisKey);

// 发送邮件

Mail::to(env('ADMIN_EMAIL'))->send(new SendSystemInfo($data));

}

设置任务调度编辑 app/Console/Kernel.php 的 $commands/**

* The Artisan commands provided by your application.

*

* @var array

*/

protected $commands = [

\App\Console\Commands\CountIpDay::class,

];在 schedule 方法中设置定时任务,执行时间为每天凌晨一点/**

* Define the application's command schedule.

*

* @param \Illuminate\Console\Scheduling\Schedule $schedule

* @return void

*/

protected function schedule(Schedule $schedule)

{

$schedule->command('countIp:day')->dailyAt('1:00');

}最后是在 Linux 中添加定时任务,每分钟执行一次 artisan schedule:run,如下

* * * * * /you_php you_path/artisan schedule:run >> /dev/null 2>&1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值