CMO*_*MOS 3 laravel laravel-5 laravel-queue
因此,我正在尝试优化网站,并在每次加载和退出页面时都保存一个指标(页面停留时间,IP地址等)进行分析。但是,这些是我服务器上相当大的瓶颈。当查看运行我的整个功能所需的时间时,整个函数大约需要1-2ms,然后保存到数据库大约需要100-200ms。因此,我的目标是运行我的函数,然后调度新任务,这将完成指标的实际保存。这样,所有保存的模型都可以卸载到队列中。以下是我的工作副本
class SaveMetric implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Metrics $metric)
{
//
$metric->save();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在获取所有需要的值后在控制器功能中运行此命令
dispatch(new SaveMetric($newMetric));
Run Code Online (Sandbox Code Playgroud)
这似乎可以运行,但似乎无能为力。我想念什么吗?(编辑)这样做〜某事〜它只是将一条记录保存到DB中所有字段中都为null,就像我创建了一个没有任何值的新指标一样。
我使用工匠make:job命令创建了作业
小智 5
你很亲密
class SaveMetric implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $metric;
/**
* Create a new job instance.
*
* @param Metrics $metric
*/
public function __construct(Metrics $metric)
{
$this->metric = $metric;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->metric->save();
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档:
在此示例中,请注意,我们能够将Eloquent模型直接传递到排队作业的构造函数中。由于作业正在使用SerializesModels特性,因此在处理作业时,雄辩的模型将正常进行序列化和反序列化。如果您排队的作业在其构造函数中接受Eloquent模型,则仅该模型的标识符将被序列化到队列中。实际处理完作业后,队列系统将自动从数据库中重新检索完整的模型实例。