所以我想優化我的網站,並在每一頁加載和退出我保存一個度量(時間在頁面上,IP地址等)的分析。然而,這些都是我的服務器上體面大小的瓶頸。當查看運行所需的時間時,我的整個功能花費大約1-2ms,然後保存到DB需要大約100-200ms。所以我的目標是運行我的功能,然後派遣一個新的工作,這將做到實際的度量保存。這樣,我的模型的所有保存都可以卸載到隊列中。下面是我的工作在我的控制器功能的副本Laravel 5.4通過異步隊列保存模型
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();
}
}
再經過我搶,我需要我運行這個
dispatch(new SaveMetric($newMetric));
這似乎運行,但似乎並沒有做任何事情的所有值。我錯過了什麼嗎? (編輯)這是〜東西〜它只是將所有字段中的記錄保存到數據庫中,如同我創建了一個沒有任何值的新度量。
- 是否需要將隊列傳遞給作業調度?
- 我是否需要運行一個守護進程或類似的東西來實際處理隊列中的內容?
我創建使用工匠使工作:
這與刪除SerializesModels特質一起讓我的預期行爲。 – CMOS
謝謝!是的,我不得不刪除'SerializesModels'特性,因爲我希望我的Job能夠保存任何繼承我的'BaseModel'的類。 – Ryan