Представил
Я уже писал об использовании Linux для задач синхронизации раньше. На самом деле, laravel также может выполнять задачи синхронизации. Требование состоит в том, чтобы подсчитать количество IP-обращений в день, хотя в таблице данных есть данные. Для демонстрации создается новая статистика прослушивателей.
Запись IP
Эта статья знакомит с реализацией события/прослушивателя и расширяет ее.
- Зарегистрируйте нового слушателя в
app/Провайдеры/EventServiceProvider.phpНовые дополнения к файламСоздание журнала Ip-адресов пользователей
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'App\Events\UserBrowse' => [
'App Listeners CreateBrowseLog', // User Access Records
'App Listeners CreateUserIpLog', // User IP Records
],
];Выполнение после завершения добавления событие php artisan:сгенерировать Он создан. app/Listeners/CreateUserIpLog.php Документы;
- В новом прослушивателе запишите IP-адрес пользователя и используйте для записи установленный тип данных Redis. Код выглядит следующим образом
/**
* Handle the event.
* Recording User 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 does not exist, indicating that it is the first time to store it that day, setting the expiration time for three days
$redis->expire($redisKey, 259200);
}
}Статистический доступ
Он записывает IP-адрес пользователя, а затем записывает код статистики.
- Создайте новую задачу
php artisan make:количество команд в день IpЭто что-то новенькое.app/Console/Commands/CountIpDay.phpДокументы; - Установите подпись
защищено;И описаниеЗащищено; - останься
справьсяВы также можете написать код вkernel.phpИспользовать вВывод электронной почты ВСпособ отправки почты
/**
* 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.'The total number of IP accesses is'. $redis - > scard ($redisKey);
// Send mail
Mail::to(env('ADMIN_EMAIL'))->send(new SendSystemInfo($data));
}Настройка планирования задач
- редактировать
app/Console/Kernel.phpИз$команд
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\CountIpDay::class,
];- пребывание
расписаниеМетод устанавливает задачу по времени для выполнения в 1:00 утра каждый день.
/**
* 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 и выполняйте ее каждую минуту.
расписание ремесленника:выполнитьСледующим образом* * * * */you_php ваш_пут/расписание ремесленника:выполнить >>/dev/null 2>&1
Справочный материал: планирование задач laravel, примеры планирования задач по времени Laravel – статистика количества новых пользователей в неделю