当前位置: 首页 > 后端技术 > PHP

Laravel任务调度实例

时间:2023-03-29 22:55:31 PHP

简介其实laravel也可以执行定时任务。需求是统计每天访问的IP数量。数据表中虽然有数据,但为了演示,还是新建一个监听器,用于统计。录制IP本文介绍事件/监听器的实现,并在此基础上进行扩展。要注册新的侦听器,请添加CreateUserIpLog/***应用程序的事件侦听器映射。**@vararray*/protected$listen=[Registered::class=>在app/Providers/EventServiceProvider.php文件中[SendEmailVerificationNotification::class,],'App\Events\UserBrowse'=>['App\Listeners\CreateBrowseLog',//用户访问记录'App\Listeners\CreateUserIpLog',//用户IP记录],];添加完成执行phpartisanevent:generate后,创建app/Listeners/CreateUserIpLog.php文件;在新建的监听器中,记录用户的IP,使用Redis的Set数据类型进行记录,代码如下/***处理事件。*记录用户IP*@paramUserBrowse$event*@returnvoid*/publicfunctionhandle(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);如果(!$isExists){//key不存在,说明当天第一次入库,过期时间设置三天$redis->expire($redisKey,259200);}}统计访问记录用户IP,然后写统计代码新建一个Taskphpartisanmake:commandCountIpDay,新建app/Console/Commands/CountIpDay.php文件;设置签名保护$signature='countIp:day';anddescriptionprotected$description='统计每日访问IP';在handle方法中在kernel.php中编写代码,或者使用kernel.php中的emailOutputTo方法发送邮件/***执行控制台命令。**@returnmixed*/publicfunctionhandle(){$redis=Redis::connection('cache');$yesterday=Carbon::yesterday()->format('Y-m-d');$redisKey='user_ip:'.$昨天;$数据=$昨天。($redisKey);//发送邮件Mail::to(env('ADMIN_EMAIL'))->send(newSendSystemInfo($data));}设置任务调度编辑app/Console/Kernel.php的$commands/***您的应用程序提供的Artisan命令。**@vararray*/protected$commands=[\App\Console\C命令\CountIpDay::类,];在schedule方法中设置定时任务,执行时间为每天凌晨1点/***定义应用程序的命令调度。**@param\Illuminate\Console\Scheduling\Schedule$schedule*@returnvoid*/受保护函数schedule(Schedule$schedule){$schedule->command('countIp:day')->dailyAt('1:00');}最后在linux中添加一个定时任务,每分钟执行一次artisanschedule:run,如下*****/you_phpyou_path/artisanschedule:run>>/dev/null2>&1参考资料:laravel任务调度,Laravel定时任务调度示例——统计每周新增用户数