首页 > 解决方案 > Symfony 实体被另一个进程更改并保持不变。我的长时间运行的进程没有检测到它

问题描述

我有一个长期运行的 symfony 进程,它定期使用查询实体

 $msg = $this->entityManager->getRepository('App\Entity\Message')->findOneBy([
        'id' => $id
    ]);

我收到了消息,一切都很好。两分钟后,相同的消息被另一个 Symfony 进程更改并保持不变。现在 5 分钟后,我再次查询相同的 msg Id:

 $msg = $this->entityManager->getRepository('App\Entity\Message')->findOneBy([
        'id' => $id
    ]);

不幸的是,我再次收到原始消息,可能是因为它被缓存了,即 Symfony/Doctrine 没有检测到其他进程已经修改了

我当然可以做的数据库

$this->entityManager->refresh($msg);

,但这会给数据库带来很多不必要的负载。

有没有更好的方法,例如为缓存设置一个通用的 timeToLive?或者甚至更好:让 Symfony 检测缓存何时“变脏”?

标签: symfonycachingdoctrinemultiprocessing

解决方案


推荐阅读