私は自分のサイトを最適化しようとしています。すべてのページの読み込みと終了時に、アナリティクスのメトリック(ページ上の時間、IPアドレスなど)を保存します。しかし、これは私のサーバー上でかなりの大きさのボトルネックです。物事を実行するのにかかる時間を見ると、私の全機能は1〜2msかかるので、DBに保存するには約100〜200msかかります。だから私の目標は、私の機能を実行し、新しい仕事を派遣することです、それはメトリックの実際の節約を行うでしょう。このようにして、私のモデルのすべての保存をキューにオフロードすることができます。私は私がこれを実行するようだが、何もしていないようです。このLaravel 5.4非同期キューによるモデルの保存
dispatch(new SaveMetric($newMetric));
を実行する必要があるすべての値をつかむした後、以下の私のコントローラ機能で
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();
}
}
そして、私の仕事のコピーです。何か不足していますか? (Edit)これは何か〜何もしないで新しいメトリックを作成したかのように、レコードをすべてのフィールドにnullでDBに保存するだけです。
- キューをジョブディスパッチに渡す必要がありますか?
- キュー内のものを実際に処理するためにデーモンなどを実行する必要がありますか?
私は職人のメイクを使用してジョブを作成し、ジョブコマンド
これは、SerializesModelsの特性を削除することで、私の意図した動作になりました。 – CMOS
ありがとうございました!はい、私は 'SerializesModels'特性も削除しなければなりませんでした。これは、私のJobが' BaseModel'を継承するクラスを保存できるようにするためです。 – Ryan