何时使用 Doctrine 或 Symfony 缓存?

问题描述 投票:0回答:2

我广泛阅读了 Doctrine 的不同缓存选项以及 symfony 缓存机制:

Symfony 官方:https://symfony.com/doc/4.0/components/cache.html

Doctrine 官方:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/caching.html

KnP 大学(一如既往地非常有用):https://knpuniversity.com/screencast/symfony-fundamentals/caching

其他好资源:https://blog.kaliop.com/blog/2014/10/06/doctrine-symfony2-2/

尽管如此,尽管解释了如何使用缓存系统,但我无法弄清楚何时使用缓存。缓存在什么情况下非常有用,什么时候不使用它。

例如,在我的项目中,我需要从数据库中提取大量数据并进行缓存(提取具有大量左连接的实体)。对于某些人来说,这些左连接会通过机器人使用 cron 作业(symfony 命令)进行调用,每小时、每天或每分钟定期更新。

我不知道当我在启用缓存机制的情况下向用户显示数据时,如何确保所有数据都正确更新?如果数据库更新,我是否需要从缓存中手动删除数据,例如在更新时调用

$cacheDriver->delete('my_data’);
并检查数据是否存在,然后在检索数据时重新保存?这是正确的方法吗?

另外,我应该使用 Doctrine Cache 还是 Symfony 4 缓存?应该选择哪一个呢? 我有一个我想在另一个 SO 线程上缓存的查询示例:https://stackoverflow.com/a/51800728/1083453

底线是,如何使查询尽可能高效?

我倾向于以下几点:

  • 更新查询中包含的任何数据时删除缓存。
  • 第一次调用查询时缓存
  • 每当在 2 个更新之间调用相同查询时检索它

我走的路正确吗?

php symfony caching doctrine-orm doctrine
2个回答
3
投票

没有官方规则。有时,您可能会认为自己正在进行优化,最好的情况是浪费时间,最坏的情况是性能下降,因为检查是否有缓存及其是否有效的过程比查询本身要长。

假设您在构建应用程序方面做得足够好(这意味着不存在无效的操作,您的查询做得很好并且没有加载无用的数据等),这实际上是一个案例研究。

尝试使用模拟数百个客户端访问应用程序的页面来测试应用程序的页面。您很快就会确定哪些页面无法处理费用,并且调试器将告诉您哪些查询正在减慢它们的速度。这些肯定会从缓存中受益。


1
投票

我也想知道同样的事情,并偶然发现了你的问题。

完全披露:我从未使用过学说结果缓存:) 我期望的一件事是,使用 Doctrine 结果缓存,您无需为缓存数据的序列化/反序列化而烦恼。当您尝试缓存并稍后检索复杂实体时,这可能非常方便。

© www.soinside.com 2019 - 2024. All rights reserved.