亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

laravel 任務(wù)調(diào)度實(shí)例

loonggg / 1110人閱讀

摘要:導(dǎo)語之前寫過使用的進(jìn)行定時(shí)任務(wù),實(shí)際上也可以執(zhí)行定時(shí)任務(wù)。需求是統(tǒng)計(jì)每日訪問的數(shù),雖然數(shù)據(jù)表中有數(shù)據(jù),為了演示,新建監(jiān)聽器統(tǒng)計(jì)。記錄這篇文章中介紹了實(shí)現(xiàn)了事件監(jiān)聽器,在此基礎(chǔ)上進(jìn)行擴(kuò)展。

導(dǎo)語

之前寫過使用 Linux 的進(jìn)行定時(shí)任務(wù),實(shí)際上 laravel 也可以執(zhí)行定時(shí)任務(wù)。需求是統(tǒng)計(jì)每日訪問的 IP 數(shù),雖然數(shù)據(jù)表中有數(shù)據(jù),為了演示,新建監(jiān)聽器統(tǒng)計(jì)。

記錄 IP

這篇文章中介紹了實(shí)現(xiàn)了事件/監(jiān)聽器,在此基礎(chǔ)上進(jìn)行擴(kuò)展。

注冊(cè)一個(gè)新的監(jiān)聽器,在 app/Providers/EventServiceProvider.php 文件中新添加 CreateUserIpLog

/**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        "AppEventsUserBrowse" => [
            "AppListenersCreateBrowseLog",// 用戶訪問記錄
            "AppListenersCreateUserIpLog",// 用戶 IP 記錄
        ],
    ];

添加完成后執(zhí)行 php artisan event:generate,創(chuàng)建好了 app/Listeners/CreateUserIpLog.php 文件;

在新建監(jiān)聽器中,記錄用戶的 IP,使用 Redis 的 Set 數(shù)據(jù)類型進(jìn)行記錄,代碼如下

/**
     * 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 不存在,說明是當(dāng)天第一次存儲(chǔ),設(shè)置過期時(shí)間三天
            $redis->expire($redisKey, 259200);
        }
    }
統(tǒng)計(jì)訪問

上面將用戶的 IP 記錄下來,然后就是編寫統(tǒng)計(jì)代碼

新建一個(gè)任務(wù) php artisan make:command CountIpDay,新建了 app/Console/Commands/CountIpDay.php 文件;

設(shè)置簽名 protected $signature = "countIp:day"; 和描述 protected $description = "統(tǒng)計(jì)每日訪問 IP";

handle 方法中編寫代碼,也可以在 kernel.php 中使用 emailOutputTo 方法發(fā)送郵件

/**
     * 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 總數(shù)為 " . $redis->scard($redisKey);

        // 發(fā)送郵件
        Mail::to(env("ADMIN_EMAIL"))->send(new SendSystemInfo($data));
    }
設(shè)置任務(wù)調(diào)度

編輯 app/Console/Kernel.php$commands

/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        AppConsoleCommandsCountIpDay::class,
    ];

schedule 方法中設(shè)置定時(shí)任務(wù),執(zhí)行時(shí)間為每天凌晨一點(diǎn)

/**
     * Define the application"s command schedule.
     *
     * @param  IlluminateConsoleSchedulingSchedule $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command("countIp:day")->dailyAt("1:00");
    }

最后是在 Linux 中添加定時(shí)任務(wù),每分鐘執(zhí)行一次 artisan schedule:run,如下
* * * * * /you_php you_path/artisan schedule:run >> /dev/null 2>&1


參考資料:laravel 任務(wù)調(diào)度、Laravel定時(shí)任務(wù)調(diào)度例子——統(tǒng)計(jì)每周新增的用戶數(shù)量

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/31206.html

相關(guān)文章

  • laravel 隊(duì)列

    摘要:如果任務(wù)沒有在規(guī)定時(shí)間內(nèi)完成,那么該有序集合的任務(wù)將會(huì)被重新放入隊(duì)列中。這兩個(gè)進(jìn)程操縱了三個(gè)隊(duì)列,其中一個(gè),負(fù)責(zé)即時(shí)任務(wù),兩個(gè),負(fù)責(zé)延時(shí)任務(wù)與待處理任務(wù)。如果任務(wù)執(zhí)行成功,就會(huì)刪除中的任務(wù),否則會(huì)被重新放入隊(duì)列中。 在實(shí)際的項(xiàng)目開發(fā)中,我們經(jīng)常會(huì)遇到需要輕量級(jí)隊(duì)列的情形,例如發(fā)短信、發(fā)郵件等,這些任務(wù)不足以使用 kafka、RabbitMQ 等重量級(jí)的消息隊(duì)列,但是又的確需要異步、重試...

    BDEEFE 評(píng)論0 收藏0
  • 高性能千萬級(jí)定時(shí)任務(wù)管理服務(wù)forsun laravel插件使用詳解

    摘要:高性能高精度定時(shí)服務(wù),輕松管理千萬級(jí)定時(shí)任務(wù)。支持任務(wù)到期觸發(fā)和。支持創(chuàng)建延時(shí)任務(wù)和定時(shí)到期任務(wù),和原生保持相同接口,輕松使用。不支持任務(wù)輸出任務(wù)鉤子及維護(hù)模式。是不指定任務(wù)名時(shí)自動(dòng)生成,每個(gè)任務(wù)名必須唯一,相同任務(wù)名重復(fù)定義將會(huì)自動(dòng)覆蓋。 Forsun高性能高精度定時(shí)服務(wù),輕松管理千萬級(jí)定時(shí)任務(wù)。 定時(shí)服務(wù)項(xiàng)目地址:https://github.com/snower/forsun l...

    Muninn 評(píng)論0 收藏0
  • 剖析 Laravel 計(jì)劃任務(wù)--事件屬性

    摘要:所以在這里創(chuàng)建一個(gè)事件的兩個(gè)實(shí)際方法是通過調(diào)用或,第一個(gè)提交一個(gè)的實(shí)例,后者提交來做一些特殊處理。那么會(huì)用表達(dá)式檢查命令是否到期嗎恰恰相反,使用庫來確定命令是否基于當(dāng)前系統(tǒng)時(shí)間相對(duì)于我們?cè)O(shè)置的時(shí)區(qū)。 譯文GitHub https://github.com/yuansir/diving-laravel-zh 原文鏈接 https://divinglaravel.com/task-sche...

    xiaowugui666 評(píng)論0 收藏0
  • 剖析 Laravel 計(jì)劃任務(wù)--初探

    摘要:表示該工作應(yīng)該在每個(gè)月日上午運(yùn)行這里還有一些其他的示例表示工作應(yīng)該在星期三每分鐘運(yùn)行一次。表示該工作應(yīng)該每天在凌晨點(diǎn)和點(diǎn)運(yùn)行兩次。方法調(diào)用的實(shí)例作為唯一的參數(shù),這是用于記錄您提供的作業(yè)的計(jì)劃任務(wù)管理器,并決定每次守護(hù)進(jìn)程應(yīng)該運(yùn)行什么。 譯文GitHub https://github.com/yuansir/diving-laravel-zh 原文鏈接 https://divinglar...

    mo0n1andin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<