gpt4 book ai didi

PHP Laravel 任务调度最佳实践

转载 作者:行者123 更新时间:2023-11-29 11:06:40 24 4
gpt4 key购买 nike

我正在构建一个简单的应用程序,它将根据用户输入的时间安排启用/禁用广告集。

例如,用户可能希望在上午 6 点至上午 9 点转换广告,然后在下午 5 点至晚上 10 点转换广告,并在其他时间关闭。

安排此事件的最佳方式是什么?我会将所有数据存储在 MYSQL 中,我是否应该有一个 cron/任务来每分钟检查表中与时间匹配的行,然后启用/禁用该功能?

继续该示例,该表可能包含列、时间、函数。

上午 6 点,启用上午 9 点,禁用下午 5 点,启用晚上 10 点,禁用

我的问题是,如果我有 10,000 个左右的用户,这对于网络服务器来说是否太多,或者是否有更有效的方法来做到这一点?

最佳答案

在下面的方法中,我们正在做的是......

  1. 有 2 个表 - adsad_timings,为每个广告保存不同的 start_timeend_time。 .
  2. start_time(如0600)和end_time(如0900)保存在哪里。因此,现在您只需检查当前时间(例如 2016-23-12 06:50:11)是否...将其转换为 0650
  3. 现在,您可以找出 start_time 小于 650end_time 大于该值的所有广告,从而找出活跃广告并执行以下操作反之则停止广告。
  4. 每 10 分钟运行一次...给每个用户 10 分钟的最小输入时间间隔...这样您每 10 分钟运行一次 cron,并且还可以节省后台内存...

你的 table

ad
id | name | current_status | ....
1 | ... | 0 | .....

ad_timings
id | ad_id | start_time | end_time
1 | 1 | 600 | 900
1 | 1 | 1700 | 2200

你的模型

class Ad extends Model
{
public function timings()
{
return $this->hasMany('App\Models\AdTimings');
}
}

class AdTimings extends Model
{
protected $table = 'ad_timings';

public function ad()
{
return $this->belongsTo('App\Models\Ad')
}
}

在你的调度程序中

use Carbon\Carbon;
use App\Models\Ad;

class AdScheduler
{
public function handle()
{
$now = Carbon::now();

// This will convert current timestamp to something like
// Timestamp: 2016-12-23 23:36:11
// to
// Now: 2336
// Basically you are calculating time on the basis of hundreds..
// Like people say... 1300 hours... get me?
$now = $now->hour . $now->minute;

// These are the ads to run
// You can change their current_status field to 1 with update
$adsToRun = Ad::whereHas('timings', function($query) use ($now) {
return $query->where('start_time', '<=', $now)
->where('end_time', '>=', $now)
})->get();

// Ads to Stop
// You can change their current_status field to 0 with update
$adsToStop = Ad::whereHas('timings', function($query) use ($now) {
return $query->where('start_time', '>=', $now)
->where('end_time', '<=', $now)
})->get();
}
}

关于PHP Laravel 任务调度最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41288455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com