成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

loonggg / 1077人閱讀

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

導(dǎo)語

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

記錄 IP

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

注冊一個新的監(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)天第一次存儲,設(shè)置過期時間三天
            $redis->expire($redisKey, 259200);
        }
    }
統(tǒng)計訪問

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

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

設(shè)置簽名 protected $signature = "countIp:day"; 和描述 protected $description = "統(tǒng)計每日訪問 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è)置定時任務(wù),執(zhí)行時間為每天凌晨一點

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

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


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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31206.html

相關(guān)文章

  • laravel 隊列

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

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

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

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

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

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

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

    mo0n1andin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<