Php Laravel将大量数据推送到队列

Php Laravel将大量数据推送到队列,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个数据库中有大约500k记录的模型。我需要获取所有项目并将~500k个作业推到队列中 我试过: Model::cursor()->each(function ($item) { dispatch(new Job($item)); }); // and Model::chunk(10000, function ($items) { foreach ($items as $item) { dispatch(new Job($item)); } })

我有一个数据库中有大约500k记录的模型。我需要获取所有项目并将~500k个作业推到队列中

我试过:

Model::cursor()->each(function ($item) {
    dispatch(new Job($item));
});
// and
Model::chunk(10000, function ($items) {
    foreach ($items as $item) {
        dispatch(new Job($item));
    }
});

但在这两种情况下,我都出现了内存泄漏,因为我需要迭代所有500k记录,并在任何情况下调用
dispatch()
方法。是否有最好的方法将大量数据推送到Laravel队列?

仅使用ID可能适用于您的情况。试试看

调度

Model::select('id'))
->得到()
->拔毛('id')
->每个(功能($id){
作业::调度($id);
});
工作

类作业实现ShouldQueue
{
使用可调度、可排队、可交互的swithqueue;
受保护的$id;
公共函数构造($id)
{
$this->id=$id;
}
公共函数句柄()
{
$item=Model::find($this->id);
//做点什么
}
}

好多了,谢谢。但我仍然有内存泄漏,我想我应该把这个巨大的结果分解成块,并使用类似作业批处理的东西。。。