Php 具有SerializesModels特性的Laravel队列作业检索过时的模型数据

Php 具有SerializesModels特性的Laravel队列作业检索过时的模型数据,php,mysql,laravel,redis,Php,Mysql,Laravel,Redis,我通过redis使用Laravel队列发送通知。但是,每当我将模型传递给通知时,当通过队列发送通知时,它们的属性就过时了 这基本上就是我正在做的: 在控制器中(或其他地方): $thing=新事物();//在这种情况下,这是一个模型。 $thing->name='Whatever'; $thing->save(); request()->user()->notify(新发生的事情($thing)) SomethingOccessed.php: 看来我们的数据库使用了太多的CPU,导致它定期切换

我通过redis使用Laravel队列发送通知。但是,每当我将模型传递给通知时,当通过队列发送通知时,它们的属性就过时了

这基本上就是我正在做的:

在控制器中(或其他地方):

$thing=新事物();//在这种情况下,这是一个模型。
$thing->name='Whatever';
$thing->save();
request()->user()->notify(新发生的事情($thing))
SomethingOccessed.php:


看来我们的数据库使用了太多的CPU,导致它定期切换到故障切换。我认为这就是问题的原因。在实现了减少数据库负载的调整之后,问题得到了解决。解决这个问题的一个办法是增加一点延迟(如我在问题中所指出的)


我不知道为什么这似乎只影响通知,而不影响其他队列作业或请求。如果有人有更详细的解释,请随时发布新的答案。

我们的数据库似乎使用了太多的CPU,导致它定期切换到故障切换。我认为这就是问题的原因。在实现了减少数据库负载的调整之后,问题得到了解决。解决这个问题的一个办法是增加一点延迟(如我在问题中所指出的)


我不知道为什么这似乎只影响通知,而不影响其他队列作业或请求。如果有人有更详细的解释,请随时发布新答案。

您有mysql副本吗?如果有,则复制副本可能没有最新的数据。@Ersoy我有一个故障转移,因此您可能有问题。但是,除了少数例外,作业中的所有数据都已过时,而只有一小部分查询被发送到故障切换(根据GCP度量)。这些通知的所有查询似乎都不太可能发送到故障转移而不是主数据库。或者有什么解释吗?我认为这也会影响在非作业(http)进程上执行的其他查询。但是,如果异步作业仅在您设置延迟时获取最新记录,那么这可能就是原因。您可以尝试使用单个RDS来查看它。另一个选项是将
列中的
updated_放入此表(在作业内部打印),以查看它是否也是最新的。是否有mysql副本?如果有,则复制副本可能没有最新的数据。@Ersoy我有一个故障转移,因此您可能有问题。但是,除了少数例外,作业中的所有数据都已过时,而只有一小部分查询被发送到故障切换(根据GCP度量)。这些通知的所有查询似乎都不太可能发送到故障转移而不是主数据库。或者有什么解释吗?我认为这也会影响在非作业(http)进程上执行的其他查询。但是,如果异步作业仅在您设置延迟时获取最新记录,那么这可能就是原因。您可以尝试使用单个RDS来查看它。另一个选项是将
列中的
updated_放入此表(在作业内部打印),以查看它是否也是最新的。