在 symfony2 中缓存实体方法/属性



我想知道在symfony2中缓存实体/值的最佳实践是什么?

例如,如果我有一个实体$entity,使用方法 ->getLongComputing(),我想存储该结果,而不必在每次调用它时都计算出来。

显然,使用实体 ID 将结果存储在 APC 中非常容易,但我遇到的问题是必须在实体外部完成,因为它无法访问容器。

例如,我最终会在调用getter的控制器中到处重复代码,检查我们是否已经知道该值。

有没有干净的方法让我能够调用 $entity->getLongComputing() 并且函数本身处理任何缓存?显然我可以将容器传递到实体中,但我知道这不是最佳实践吗?

最好的

方法是什么?

谢谢。

您可以将

longCompute 的结果存储在数据库中吗?

在这种情况下(我用它来满足我的需要),您可以使用生命周期事件(prePersist和preUpdate)在实体中填充您的结果

  • http://symfony.com/fr/doc/current/book/doctrine.html
  • http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events

在我看来,

是的,将计算结果保存在数据库中 - 在同一表中或作为关系,没关系。它比缓存更好,因为它仅在实体更改时更改。然后你可以使用Doctrine缓存系统 - 它非常简单,只需要在存储库或查询上设置缓存方法(setResultCacheMethod或类似)。

您可以使用 Doctrine 缓存(sql 和结果)、会话的 redis、避免长时间计算的适当数据库架构和带有 ESI(反向代理缓存)的 Varnish 来实现最佳性能。

在工作和工作时,您可以比开始时至少快 1000% 完成应用程序。

问候

最新更新