本篇文章给大家带来的内容是关于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, ], 'AppEventsUserBrowse' => [ 'AppListenersCreateBrowseLog',// 用户访问记录 'AppListenersCreateUserIpLog',// 用户 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 记录下来,然后就是编写统计代码
代码小浣熊
代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节
51 查看详情
新建一个任务 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 = [ AppConsoleCommandsCountIpDay::class, ];
在 schedule 方法中设置定时任务,执行时间为每天凌晨一点
/** * Define the application's command schedule. * * @param IlluminateConsoleSchedulingSchedule $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
以上就是laravel任务调度的介绍(附代码)的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/214650.html
微信扫一扫
支付宝扫一扫